2012-08-06 14 views
7

मैं एक जीयूआई एप्लीकेशन बनाने की कोशिश कर रहा हूं।क्यूटी जीयूआई डिजाइन प्रोग्रामेटिक

मुख्य विंडो, QMainWindow में, 9 आकार के निश्चित लेबल के साथ लेबल और मुख्य विंडो का आकार भी शामिल है।

मैंने इसे क्यूटी जीयूआई डिजाइनर के बिना प्रोग्रामेटिक रूप से बनाने की कोशिश की। प्रोजेक्ट बिना त्रुटि के बनाया गया है लेकिन मुझे मुख्य विंडो पर कोई लेबल और न ही लेआउट दिखाई नहीं दे रहा है। यह सिर्फ खाली है।

यहाँ मेरी स्रोत कोड है:

WCwindow::WCwindow() 
{ 
    // initialize widgets with text 
    CAM111 = new QLabel("CAM 01"); 
    CAM121 = new QLabel("CAM 02"); 
    CAM131 = new QLabel("CAM 03"); 

    CAM211 = new QLabel("CAM 04"); 
    CAM221 = new QLabel("CAM 05"); 
    CAM231 = new QLabel("CAM 06"); 

    CAM311 = new QLabel("CAM 07"); 
    CAM321 = new QLabel("CAM 08"); 
    CAM331 = new QLabel("CAM 09"); 

    CAM111->setFixedSize(wcW,wcH); 
    CAM121->setFixedSize(wcW,wcH); 
    CAM131->setFixedSize(wcW,wcH); 
    CAM211->setFixedSize(wcW,wcH); 
    CAM221->setFixedSize(wcW,wcH); 
    CAM231->setFixedSize(wcW,wcH); 
    CAM311->setFixedSize(wcW,wcH); 
    CAM321->setFixedSize(wcW,wcH); 
    CAM331->setFixedSize(wcW,wcH); 

    QGridLayout *layout = new QGridLayout; 
    layout->addWidget(CAM111,0,0); 
    layout->addWidget(CAM121,0,1); 
    layout->addWidget(CAM131,0,2); 

    layout->addWidget(CAM211,1,0); 
    layout->addWidget(CAM221,1,1); 
    layout->addWidget(CAM231,1,2); 

    layout->addWidget(CAM311,2,0); 
    layout->addWidget(CAM321,2,1); 
    layout->addWidget(CAM331,2,2); 

    setLayout(layout); 

    setWindowTitle("Camera Window"); 
    setFixedSize(1000, 800); 

} 
निश्चित रूप से

, वर्ग प्रारंभ और main.cpp में पैदा की है:

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    WCwindow *WCwin = new WCwindow; 

    WCwin->show(); 

    return app.exec(); 
} 

बग की किस तरह मैं कर रहा हूँ ??

+2

फिक्स्ड आकार एक बुरा विचार कर रहे हैं, यह देखते हुए सिस्टम: उस मामले में मैं शीर्ष पट्टी में "तोड़ लेआउट" बटन पर क्लिक करके जीयूआई संपादक में अपने खिड़की से लेआउट को दूर करने की सलाह देंगे, उसके बाद निम्न का उपयोग/उपयोगकर्ता-निर्भर फ़ॉन्ट आकार, अनुवाद आदि। वैसे भी, wcw और wcH के मान क्या हैं? –

+0

बीटीडब्ल्यू, यदि आप लेबल पर setFixedSize को छोड़ देते हैं, तो इसे कम से कम अच्छा काम करना चाहिए। –

+0

ऐसा इसलिए है क्योंकि वेबकैम से कैप्चर की गई छवि का आकार निश्चित आकार है। लेबल उन कैप्चर छवियों के लिए धारक हैं –

उत्तर

4

नीचे दिया गया कोड ठीक काम करता है। समस्या उस कोड में थी जिसे आप नहीं दिखा रहे थे। जब आप QMainWindow का उपयोग करते हैं, जैसा कि आपने अंततः करने के लिए भर्ती कराया है, तो आपको अपने नए निर्माण के साथ centralWidget सेट करने की आवश्यकता है।

// main.cpp 
#include <QVector> 
#include <QMainWindow> 
#include <QLabel> 
#include <QGridLayout> 
#include <QApplication> 

class WCwindow : public QMainWindow 
{ 
public: 
    WCwindow(); 
private: 
    QVector<QLabel*> cams; 
    QLabel* cam(int r, int c) const { 
     return cams[r*3 + c]; 
    } 
}; 

WCwindow::WCwindow() 
{ 
    QGridLayout *layout = new QGridLayout; 

    for (int i = 1; i < 10; ++ i) { 
     QLabel * const label = new QLabel(QString("CAM %1").arg(i, 2, 10, QLatin1Char('0'))); 
     label->setFixedSize(200, 50); 
     layout->addWidget(label, (i-1)/3, (i-1) % 3); 
     cams << label; 
    } 

    QWidget * central = new QWidget(); 
    setCentralWidget(central); 
    centralWidget()->setLayout(layout); 

    setWindowTitle("Camera Window"); 
    setFixedSize(1000, 800); 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    WCwindow win; 
    win.show(); 
    return app.exec(); 
} 
+0

धन्यवाद! मैंने आपका कोड चलाया है और यह ठीक काम करता है। और मैंने यह भी सीखा कि यह QMainWindow मामले के लिए समान नहीं है जो मेरा मामला है। मैं अपनी कक्षा को एक QWidget सबक्लास में बदलता हूं और यह ठीक है –

+0

'QMainWindow' में, आपको इसके' केंद्रीय विजिट() 'के साथ काम करना होगा। मैंने तदनुसार कोड संशोधित किया है। –

1

WCwindowQMainWindow का एक उपवर्ग है?

//setup all your labels and layout ... 

//creating a QWidget, and setting the WCwindow as parent 
QWidget * widget = new QWidget(this); 

//set the gridlayout for the widget 
widget->setLayout(layout); 

//setting the WCwindow's central widget 
setCentralWidget(widget); 
+0

धन्यवाद! यही वह जवाब है जिसे मैं ढूंढ रहा था। यह मेरी समस्या –

+0

मारा आप अच्छे हैं! –

+0

मैं 2 उत्तरों का चयन नहीं कर सकता ?? –

संबंधित मुद्दे