Qt图形用户界面的编程设计
我正在尝试创建一个GUI应用程序 主窗口是一个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
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()
。我已经相应地修改了代码。谢谢!这是我一直在寻找的答案。它解决了我的问题