2012-08-06 8 views
7

私はGUIアプリケーションを作成しようとしています。QtのGUIデザインはプログラム的に

メインウィンドウのQMainWindowには、固定サイズのメインウィンドウのサイズと9個のラベルが含まれています。

Qt GUIデザイナなしでプログラムで作成しようとしました。プロジェクトはエラーなく構築されていますが、メインウィンドウにはラベルやレイアウトは表示されません。それはちょうど空白です。ここで

は私のソースコードです:もちろん

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

Btwでは、ラベルの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'では、' centralWidget() 'を使う必要があります。私はそれに応じてコードを修正しました。 –

1

QMainWindowのサブクラスWCwindowですか?その場合、GUIエディタのウィンドウからレイアウトを削除することをお勧めします。次に、次のコードを使用してください:

//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つの答えを選択できませんか? –

関連する問題