如何在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

上一篇: How to show a QMainWindow inside a QDialog

下一篇: Can't use QMainWindow after opened a QDialog (Qt)