设置为另一个QWidget时,为什么没有显示QWidget?

时间:2016-01-30 11:25:35

标签: qt embedded-linux qwidget

我在嵌入式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但没有任何反应。

我的代码错了还是我遇到了错误?

2 个答案:

答案 0 :(得分:2)

要在QMainWindow内显示小部件,您必须使用QMainWindow::setCentralWidget将其设置为中央小部件。主窗口本身由多个部分组成,您要填充的部分是“中央窗口小部件”:

要执行此操作,只需致电

mainWindow.setCentralWidget(&centralWidget);
在显示窗口之前

它应该可以工作。 (请注意,在中央窗口小部件上设置几何图形将不起作用,它将调整为mainWindow。请改为调整其大小。

如果您不想替换中央窗口小部件,而是要向其添加新子窗口,那么您所要做的就是将窗口小部件更改为中央窗口小部件(而不是主窗口本身):

CentralWidget centralWidget(mainWindow.centralWidget());

请注意,之前需要设置中央窗口小部件,否则返回NULL。由于您的MainWindow是一个自定义类,因此您可能已经拥有一个中央窗口小部件。如果没有,并且您只想要一个空容器,请在使用之前用简单的QWidget填充它:

mainWindow.setCentralWidget(new QWidget());//No parent required, QMainWindow takes ownership
CentralWidget centralWidget(mainWindow.centralWidget());

(图片来自:https://doc.qt.io/qt-5/qmainwindow.html#details

答案 1 :(得分:0)

问题与EGLFS平台插件有关。来自Qt文档:

  

从Qt 5.3开始,eglfs支持单个全屏GL窗口(例如,基于OpenGL的QWindow,QQuickView或QGLWidget)。不支持打开其他OpenGL窗口或将这些窗口与基于QWidget的内容混合,并将使用错误消息终止该应用程序。

参考:http://doc.qt.io/qt-5/embedded-linux.html#eglfs

因此,不支持打开与基于QWidget的内容混合的其他窗口。