Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt图形用户界面的编程设计_Qt_User Interface - Fatal编程技术网

Qt图形用户界面的编程设计

Qt图形用户界面的编程设计,qt,user-interface,Qt,User Interface,我正在尝试创建一个GUI应用程序 主窗口是一个QMainWindow,包含9个固定大小的标签以及主窗口的大小 我试图在没有QtGUI设计器的情况下以编程方式实现它。该项目是建立没有错误,但我看不到任何标签或布局上显示的主窗口。只是一片空白 以下是我的源代码: WCwindow::WCwindow() { // initialize widgets with text CAM111 = new QLabel("CAM 01"); CAM121 = new QLabel("CAM

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

主窗口是一个
QMainWindow
,包含9个固定大小的标签以及主窗口的大小

我试图在没有QtGUI设计器的情况下以编程方式实现它。该项目是建立没有错误,但我看不到任何标签或布局上显示的主窗口。只是一片空白

以下是我的源代码:

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

我有什么样的bug???

下面的代码工作正常。问题在于你没有显示的代码。当您使用
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();
}
//main.cpp
#包括
#包括
#包括
#包括
#包括
WCwindow类:公共QMainWindow
{
公众:
WCwindow();
私人:
矢量凸轮;
QLabel*凸轮(内部r,内部c)常数{
回程凸轮[r*3+c];
}
};
WCwindow::WCwindow()
{
QGridLayout*layout=新的QGridLayout;
对于(int i=1;i<10;++i){
QLabel*const label=新的QLabel(QString(“CAM%1”).arg(i,2,10,QLatin1Char('0'));
标签->设置固定尺寸(200,50);
布局->添加小部件(标签,(i-1)/3,(i-1)%3);
凸轮设置布局(布局);
setWindowTitle(“摄影机窗口”);
设置固定大小(1000800);
}
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
WCWIN;
win.show();
返回app.exec();
}

是否
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);

固定大小是个坏主意,因为系统/用户依赖于字体大小、翻译等。不管怎样,wcW和wcH的值是多少?顺便说一句,如果你跳过标签上的setFixedSize,它至少也可以工作。这是因为从网络摄像头捕获的图像的大小是固定大小的。标签是那些捕获图像的持有者谢谢!我很高兴我运行了你的代码,它运行得很好。我还了解到,QMainWindow案例与我的案例不一样。我将我的类更改为QWidget子类,它是一个
QMainWindow
,你必须使用它的
centralWidget()
。我已经相应地修改了代码。谢谢!这是我一直在寻找的答案。它解决了我的问题