qt - 为什么将一个 QWidget 设置为另一个 QWidget 的父级时不显示?

标签 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 但没有成功,但什么也没有发生。

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

最佳答案

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

为此,只需调用

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)

关于qt - 为什么将一个 QWidget 设置为另一个 QWidget 的父级时不显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35101180/

相关文章:

c++ - Qt 5 在用户输入时播放 wav 声音

qt - 使用QProcess开始一个过程

c++ - QThread 中未收到 udp 数据包

c++ - Qt:一行中不同大小的QLabels

linux - 关闭或停止Linux中的不同设备

drag-and-drop - 如何拖放自定义小部件?

c++ - 对象的所有权 - 哪个小部件应该删除它?

c - 在构建 libc(和其他库)时,GCC 的版本有多重要?

linux-kernel - Linux 内核 - 错误 : Failed to allocate 0x6b3c bytes below 0x1000000

c++ - 自定义 QLineEdit