在菜单项点击Qt的显示模式对话框(的.ui)(Qt show modal dialog (.ui)

2019-08-02 01:42发布

我想作一个简单的“关于”模态对话框,从帮助 - 叫>关于应用程序菜单。 我已经创建了Qt创建者(的.ui文件)一个模态对话框窗口。

应在菜单“关于”插槽什么码?

现在,我有这样的代码,但它显示了一个新的模式对话框(不是基于我的about.ui):

void MainWindow::on_actionAbout_triggered()
{
    about = new QDialog(0,0);
    about->show();
}

谢谢!

Answer 1:

您需要设置与UI您的对话框从您.ui文件。 Qt的uic编译器生成从一个头文件.ui文件,你需要在你的程序中包含的。 假设你.ui文件名为about.ui ,并且对话框被命名为About ,然后uic创建文件ui_about.h ,含类Ui_About 。 有不同的方法来设置你的用户界面,在最简单的,你可以做

#include "ui_about.h"

...

void MainWindow::on_actionAbout_triggered()
{
    about = new QDialog(0,0);

    Ui_About aboutUi;
    aboutUi.setupUi(about);

    about->show();
}

更好的方法是使用继承,因为它封装了你的对话更好,这样就可以实现特定的子类中的特定对话的任何功能:

AboutDialog.h:

#include <QDialog>
#include "ui_about.h"

class AboutDialog : public QDialog, public Ui::About {
    Q_OBJECT

public:
    AboutDialog( QWidget * parent = 0);
};

AboutDialog.cpp:

AboutDialog::AboutDialog( QWidget * parent) : QDialog(parent) {

    setupUi(this);

    // perform additional setup here ...
}

用法:

#include "AboutDialog.h"

...

void MainWindow::on_actionAbout_triggered() {
    about = new AboutDialog(this);
    about->show();
}

在任何情况下,重要的代码是调用setupUi()方法。

BTW:你在上面的代码对话框非模态。 要显示一个模式对话框,要么设置windowModality您的对话框的标志Qt::ApplicationModal或使用exec()而不是show()



Answer 2:

对于模态对话框,你应该使用exec() QDialogs的方法。

about = new QDialog(0, 0);

// The method does not return until user closes it.
about->exec();

// In this point, the dialog is closed.

文件说:

显示一个模式对话框的最常用的方法是调用它exec()函数。 当用户关闭对话框, exec()将提供一个有用的返回值。


另一种方法:你并不需要一个模式对话框。 让对话框显示无模式及其连接accepted()rejected()信号至适宜的槽。 然后你就可以把所有的代码在接受槽,而不是把他们后立即show() 因此,使用这种方法,你不会真的需要一个模式对话框。



文章来源: Qt show modal dialog (.ui) on menu item click