Qt在菜单项单击上显示模态对话框(.ui)

时间:2012-10-29 06:30:13

标签: c++ qt modal-dialog

我想做一个简单的'关于'模态对话框,从帮助 - >关于应用程序菜单调用。我用QT Creator(.ui文件)创建了一个模态对话框窗口。

菜单中应包含哪些代码'关于'槽?

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

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

谢谢!

2 个答案:

答案 0 :(得分:33)

您需要使用.ui文件中的UI设置对话框。 Qt uic编译器从您的.ui文件生成一个头文件,您需要在该文件中包含该代码。假设您的.ui文件名为about.ui,对话框名为About,则uic创建文件ui_about.h,其中包含类Ui_About }。设置UI有不同的方法,最简单的就是

#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()

答案 1 :(得分:5)

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

about = new QDialog(0, 0);

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

// In this point, the dialog is closed.

Docs说:

  

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

替代方式:您需要模态对话框。让对话框显示为无模式,并将其accepted()rejected()信号连接到适当的插槽。然后,您可以将所有代码放在 accept 广告位中,而不是在show()之后放置它们。因此,使用这种方式,您实际上不需要模态对话框。