如何在QDialog中显示QMainWindow
我试图在QDialog中显示QMainWindow,但前者不显示。
我已经子类QDialog,我们称之为myDialog
一个小例子:
myDialog(QWidget *p_parent) : QDialog(p_parent)
{
QGridLayout *p_dialogLayout = new QGridLayout(this);
QMainWindow *p_MainWindow = new QMainWindow(this);
QLabel *p_label = new QLabel(this);
p_MainWindow->setCentralWidget(p_label);
QPushButton *p_cancel = new QPushButton("Cancel", this);
p_dialogLayout ->addWidget(p_MainWindow, 0, 0);
p_dialogLayout ->addWidget(p_cancel, 1, 0);
}
如果我执行对话框,我只看到按钮,而不是嵌入的QMainWindow。 如果我强制显示qmainwindow,主窗口会显示在另一个窗口中。
使用QLayout::setMenuBar
在对话框中添加一个工具栏。
#include <QtWidgets>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr) : QDialog(parent)
{
resize(600, 400);
setLayout(new QHBoxLayout);
QToolBar *toolbar = new QToolBar;
toolbar->addAction("Action one");
toolbar->addAction("Action two");
layout()->setMenuBar(toolbar);
layout()->addWidget(new QLabel("Label one"));
layout()->addWidget(new QLabel("Label two"));
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}
#include "main.moc"
根据他们的文档,我不认为这是Qt框架支持的,它只能在应用程序中使用一次。
我的建议是将所有的MainWindow实现以一个单独的形式(继承QWidget
),并使用类似于p_MainWindow->setCentralWidget(p_YourNewForm);
将该形式添加到您的MainWindow中p_MainWindow->setCentralWidget(p_YourNewForm);
我已经能够做到了。
诀窍是构造没有父级的QMainWindow,然后应用.setParent
这里是:
myDialog(QWidget *p_parent) : QDialog(p_parent)
{
QGridLayout *p_dialogLayout = new QGridLayout(this);
QMainWindow *p_MainWindow = new QMainWindow(); //Without a parent
QLabel *p_label = new QLabel(this);
p_MainWindow->setCentralWidget(p_label);
QPushButton *p_cancel = new QPushButton("Cancel", this);
p_dialogLayout ->addWidget(p_MainWindow, 0, 0);
p_dialogLayout ->addWidget(p_cancel, 1, 0);
p_MainWindow->setParent(this); //Set the parent, to delete the MainWindow when the dialog is deleted.
}
链接地址: http://www.djcxy.com/p/39285.html