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

Mic*_*sky 24 c++ qt modal-dialog

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

菜单'关于'插槽应该是什么代码?

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

void MainWindow::on_actionAbout_triggered()
{
    about = new QDialog(0,0);
    about->show();
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

And*_*ter 37

您需要使用.ui文件中的UI设置对话框.Qt uic编译器从您的.ui文件生成一个头文件,您需要将其包含在代码中.假设您的.ui文件被调用about.ui,并且Dialog被命名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();
}
Run Code Online (Sandbox Code Playgroud)

更好的方法是使用继承,因为它更好地封装了对话框,以便您可以实现特定于子类中特定对话框的任何功能:

AboutDialog.h:

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

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

public:
    AboutDialog( QWidget * parent = 0);
};
Run Code Online (Sandbox Code Playgroud)

AboutDialog.cpp:

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

    setupUi(this);

    // perform additional setup here ...
}
Run Code Online (Sandbox Code Playgroud)

用法:

#include "AboutDialog.h"

...

void MainWindow::on_actionAbout_triggered() {
    about = new AboutDialog(this);
    about->show();
}
Run Code Online (Sandbox Code Playgroud)

无论如何,重要的代码是调用setupUi()方法.

顺便说一句:上面代码中的对话框是非模态的.要显示模式对话框,请将对话框的windowModality标志设置为Qt::ApplicationModal或使用exec()而不是show().


fro*_*tto 6

对于模态对话框,您应该使用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.
Run Code Online (Sandbox Code Playgroud)

文件说:

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


替代方法:你并不需要一个模式对话框.让对话框显示无模式及其连接accepted()rejected()信号到适当的槽.然后,您可以将所有代码放在接受槽中,而不是将它们放在后面show().因此,使用这种方式,您实际上不需要模态对话框.