我正在嵌入式 Linux 上使用 Qt 开发应用程序。平台插件是EGLFS。
应用程序的主要内容是:
QApplication a(argc, argv);
MainWindow mainWindow;
CentralWidget centralWidget(&mainWindow);
centralWidget.setObjectName("centralWidget");
centralWidget.setStyleSheet("CentralWidget#centralWidget {background-color: red;}");
centralWidget.setGeometry(50, 50, 500, 500);
mainWindow.show();
return a.exec();
MainWindow是继承QMainWindow的类,CentralWidget是继承QWidget的类。 MainWindow和CentralWidget的构造函数的实现是:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {}
CentralWidget::CentralWidget(QWidget *parent) : QWidget(parent) {}
启动应用程序时,我发现 CentralWidget 从未显示。我尝试强制显示 CentralWidget 但没有成功,但什么也没有发生。
我的代码是错误的还是我遇到了错误?
最佳答案
要使小部件显示在QMainWindow
内,您必须使用QMainWindow::setCentralWidget
将其设置为中央小部件。 。主窗口本身由多个部分组成,您要填充的部分是“Central Widget”:
为此,只需调用
mainWindow.setCentralWidget(¢ralWidget);
在显示窗口之前它应该可以工作。 (请注意,在中央小部件上设置几何图形将不起作用,它将调整为 mainWindow
的大小。请改为调整该窗口的大小)。
如果您不想替换中央小部件,而是向其添加新的子部件,您所要做的就是将小部件父级更改为中央小部件(而不是主窗口本身):
CentralWidget centralWidget(mainWindow.centralWidget());
请注意,中心小部件需要先设置,否则返回NULL
。由于您的 MainWindow 是一个自定义类,因此您可能已经有一个中央小部件。如果没有,并且您只需要一个空容器,请在使用之前用一个简单的 QWidget
填充它:
mainWindow.setCentralWidget(new QWidget());//No parent required, QMainWindow takes ownership
CentralWidget centralWidget(mainWindow.centralWidget());
关于qt - 为什么将一个 QWidget 设置为另一个 QWidget 的父级时不显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35101180/