我有两个消息要告诉你:坏消息和好消息。
坏消息:QMainWindow
使用QMainWindowLayout
它是 Qt 私有标头的一部分,因此您不能按原样“诚实地”自定义布局。
但你仍然可以做到。有一种QMainWindow::setMenuWidget
方法对您有用。如果您的主窗口没有菜单栏,那么您可以简单地编写
setMenuWidget(myCustomWidget);
并将myCustomWidget
被放置在窗口的顶部。
但是,如果您的应用程序中有菜单栏,这并不容易。但即使在这种情况下,您仍然可以在窗口顶部放置一个由两部分组成的小部件:上方的自定义小部件和下方的菜单栏。例如对于 QtDesigner 生成的窗口,可以像下面这样完成:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QLabel *coolLabel = new QLabel("The coolest text in the world", this);
QWidget *menuWidget = new QWidget;
QVBoxLayout *vLayout = new QVBoxLayout;
menuWidget->setLayout(vLayout);
vLayout->addWidget(coolLabel);
vLayout->addWidget(ui->menuBar);
setMenuWidget(menuWidget);
}