我想做一个简单的'关于'模态对话框,从帮助 - >关于应用程序菜单调用。我用QT Creator(.ui文件)创建了一个模态对话框窗口。
菜单中应包含哪些代码'关于'槽?
现在我有了这段代码,但它显示了一个新的模态对话框(不是基于我的about.ui):
void MainWindow::on_actionAbout_triggered()
{
about = new QDialog(0,0);
about->show();
}
谢谢!
答案 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()
之后放置它们。因此,使用这种方式,您实际上不需要模态对话框。