7

GUIアプリケーションを作成しようとしています。

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

Qt GUI Designer を使用せずにプログラムで作成しようとしました。プロジェクトはエラーなしでビルドされますが、メイン ウィンドウにラベルやレイアウトが表示されません。それはただの空白です。

ここに私のソースコードがあります:

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();
}

どのようなバグがありますか??

4

2 に答える 2

5

以下のコードは正常に動作します。問題は、表示されていないコードにありました。を使用する場合、最終的に認めたように、作成した新しいウィジェットでそれ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();
}
于 2012-08-06T11:18:56.650 に答える
1

WCwindowのサブクラスですかQMainWindow? その場合、トップバーの「レイアウトを解除」ボタンをクリックして 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);
于 2012-08-06T11:22:19.377 に答える