【转】QT创建子对话框的方法

原文地址:http://blog.csdn.net/baidu_18991997/article/details/42713159

代码实现功能:单击某个按钮后,弹出对话框,对话框中的内容可自行设计。

1.建立一个主界面,主界面中有一个pushbotton按键。

2.右键项目->添加新文件->Qt设计师界面类

Part II——对话框的模态和非模态

1、  建立一个对话框类:

2、  对话框中放置pushbutton和TextEdit:

3、  转到主窗口菜单栏New Window的槽:

4、  在槽中插入如下代码(并且在mainwindow.h中要建立对话框的指针):

5、显示结果如下:

(1)非模态显示(dialog->setModal(false)):

(2)模态显示(dialog->setModal(ture)):

给出完整程序(只给出需要填写代码和有注释部分,无改动的不给出):

mainwindow.h程序:

#ifndef MAINWINDOW_H  
#define MAINWINDOW_H  
  
#include <QMainWindow>  
#include"mydialog.h"  
namespace Ui {  
class MainWindow;  
}  
  
class MainWindow : public QMainWindow  
{  
    Q_OBJECT  
  
public:  
    explicit MainWindow(QWidget *parent = 0);  
    ~MainWindow();  
  
private slots:  
    void on_actionNew_Window_triggered();  
  
private:  
    Ui::MainWindow *ui;  
    MyDialog *dialog;   //添加私有成员,为一个dailog(窗口)的指针  
};  
  
#endif // MAINWINDOW_H  

mainwindow.cpp程序:

#include "mainwindow.h"  
#include "ui_mainwindow.h"  
  
MainWindow::MainWindow(QWidget *parent) :  
    QMainWindow(parent),  
    ui(new Ui::MainWindow)  
{  
    ui->setupUi(this);  
    //把给定的组件设定成主窗口的中央组件,这里是把plainTextEdit设为窗口的中央组件  
    setCentralWidget(ui->plainTextEdit);  
}  
  
MainWindow::~MainWindow()  
{  
    delete ui;  
}  
  
void MainWindow::on_actionNew_Window_triggered()  
{  
    //新建一个窗口对象,其中的this指定了新的窗口的父对象是MainWindow,在销毁Mainwindow时也会销毁子对象,即该窗口对象  
    dialog = new MyDialog(this);  
    //Modal属性决定了show()应该将弹出的dialog设置为模态还是非模态  
    //默认情况下该属性为false并且show()弹出的窗口是非模态的  
    //把这个属性设置为true就详单与设置QWidget::windowModality为Qt::ApplicationModal  
    //执行exec()忽略这个Modal这个属性,并且把弹出的dialog设置为模态的  
    dialog->setModal(false);    //此处ture为模态,false为非模态  
    dialog->show();  
}  

main.cpp程序:

//2014/8/3 wayne HDU  
//问题描述:(1)创建一个mainwindow(2)创建一个dialog,并且展示modal和modaless的区别  
#include "mainwindow.h"  
#include <QApplication>  
  
int main(int argc, char *argv[])  
{  
    QApplication a(argc, argv);  
    MainWindow w;  
    w.show();  
  
    return a.exec(); 

Part II——对话框的模态和非模态

1、  建立一个对话框类:

2、  对话框中放置pushbutton和TextEdit:

3、  转到主窗口菜单栏New Window的槽:

4、  在槽中插入如下代码(并且在mainwindow.h中要建立对话框的指针):

5、显示结果如下:

(1)非模态显示(dialog->setModal(false)):

(2)模态显示(dialog->setModal(ture)):

给出完整程序(只给出需要填写代码和有注释部分,无改动的不给出):

mainwindow.h程序:

#ifndef MAINWINDOW_H  
#define MAINWINDOW_H  
  
#include <QMainWindow>  
#include"mydialog.h"  
namespace Ui {  
class MainWindow;  
}  
  
class MainWindow : public QMainWindow  
{  
    Q_OBJECT  
  
public:  
    explicit MainWindow(QWidget *parent = 0);  
    ~MainWindow();  
  
private slots:  
    void on_actionNew_Window_triggered();  
  
private:  
    Ui::MainWindow *ui;  
    MyDialog *dialog;   //添加私有成员,为一个dailog(窗口)的指针  
};  
  
#endif // MAINWINDOW_H  

mainwindow.cpp程序:

#include "mainwindow.h"  
#include "ui_mainwindow.h"  
  
MainWindow::MainWindow(QWidget *parent) :  
    QMainWindow(parent),  
    ui(new Ui::MainWindow)  
{  
    ui->setupUi(this);  
    //把给定的组件设定成主窗口的中央组件,这里是把plainTextEdit设为窗口的中央组件  
    setCentralWidget(ui->plainTextEdit);  
}  
  
MainWindow::~MainWindow()  
{  
    delete ui;  
}  
  
void MainWindow::on_actionNew_Window_triggered()  
{  
    //新建一个窗口对象,其中的this指定了新的窗口的父对象是MainWindow,在销毁Mainwindow时也会销毁子对象,即该窗口对象  
    dialog = new MyDialog(this);  
    //Modal属性决定了show()应该将弹出的dialog设置为模态还是非模态  
    //默认情况下该属性为false并且show()弹出的窗口是非模态的  
    //把这个属性设置为true就详单与设置QWidget::windowModality为Qt::ApplicationModal  
    //执行exec()忽略这个Modal这个属性,并且把弹出的dialog设置为模态的  
    dialog->setModal(false);    //此处ture为模态,false为非模态  
    dialog->show();  
}  

main.cpp程序:

//2014/8/3 wayne HDU  
//问题描述:(1)创建一个mainwindow(2)创建一个dialog,并且展示modal和modaless的区别  
#include "mainwindow.h"  
#include <QApplication>  
  
int main(int argc, char *argv[])  
{  
    QApplication a(argc, argv);  
    MainWindow w;  
    w.show();  
  
    return a.exec();  
原文地址:https://www.cnblogs.com/waimen/p/7955350.html