我试图在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,主窗口将显示在另一个窗口中。
答案 0 :(得分:3)
使用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"
答案 1 :(得分:0)
根据here的文档,我认为这不受Qt框架的支持,它只能在应用程序中使用一次。
我的建议是将所有MainWindow实现以单独的形式(继承QWidget
),并使用类似p_MainWindow->setCentralWidget(p_YourNewForm);
答案 2 :(得分:0)
我能够做到。
诀窍是在没有父节点的情况下构造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.
}