以编程方式进行Qt GUI设计

时间:2012-08-06 08:13:10

标签: qt user-interface

我正在尝试创建一个GUI应用程序。

主窗口QMainWindow包含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();
}

我遇到了什么样的错误?

2 个答案:

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

答案 1 :(得分:1)

WCwindowQMainWindow的子类吗?在这种情况下,我建议通过单击顶部栏中的“break layout”按钮从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);
相关问题