我在嵌入式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但没有任何反应。
我的代码错了还是我遇到了错误?
答案 0 :(得分:2)
要在QMainWindow
内显示小部件,您必须使用QMainWindow::setCentralWidget
将其设置为中央小部件。主窗口本身由多个部分组成,您要填充的部分是“中央窗口小部件”:
要执行此操作,只需致电
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());
答案 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的内容混合的其他窗口。