Qt的GUI编程中都会有一个自动生成的主MainWindow,如果要创建对话框或者其他类型的子窗体,最好能提前创建窗体,当需要时再调用即可。具体步骤建议如下:
1:使用Qt自带的设计师界面类,既包含ui文件,也包括完整的cpp类文件。

2:生成对应的三个文件

3:在主窗体类中创建窗体对象
主窗体h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//#include <QAction>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
class QAction;
class QMenu;
class Spreadsheet;
class Find_dialog;
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
void find();
// code...
private:
Ui::MainWindow *ui;
enum {
MAX_RECENT_FILES_ = 5
};
Spreadsheet* spread_sheet_;
Find_dialog* find_dialog_;
QMenu* file_menu_;
QMenu* edit_menu_;
QAction* new_action_;
QAction* exit_action_;
QAction* find_dialog_action_;
QAction* about_qt_action_;
};
#endif // MAINWINDOW_H
主窗体cpp文件
// code
void MainWindow::find()
{
if ( !find_dialog_) {
find_dialog_ = new Find_dialog(this);
find_dialog_->setFixedSize(find_dialog_->width(), find_dialog_->height());
}
// 对话框设置为modal并显示
// find_dialog_->setWindowModality(Qt::WindowModality::WindowModal);
// find_dialog_->show();
// find_dialog_->activateWindow();
// 对话框设置为modal并显示
if (find_dialog_->exec()) {
find_dialog_->setToolTip(tr("ssssssssssssssssssssssss"));
}
}
两种modal显示子窗体。
来源:oschina
链接:https://my.oschina.net/weiweiqiao/blog/4301459