Qt 对话框QDailog及其类型

学习目的:

  Qt 对话框QDialog 学习。

  对话框是与用户进行简短交互的顶层窗口

   QDailog是Qt中所有对话框的基类

  QDailog继承于QWidget是一种容器类型的组件

  

 

—— QDialog作为专用的交互窗口而存在

——QDialog不能作为子部件嵌入其它容器中

——QDialog其实就是定制了窗口样式的特殊QWidget

实验:QDialog与QWidget的区别

  测试代码:

  

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w;
    QDialog* dai = new QDialog(&w);//将QDialog 组件嵌入QWidget 中
    dai->setWindowTitle("this is Dialog");
    dai->show();
    w.setWindowTitle("this is Widget ");
    w.show();
    w.resize(100,120);
    dai->resize(100,120);
    return a.exec();
}

运行结果:

   

  运行上面代码 将出现两个对话框,也就证明了  QDialog不能作为子部件嵌入其它容器中。

 

对话框的类型:

 模态对话框(QDialog::exec())  用在必须依赖用户选择的场合,在栈上建立即可

  ——显示后无法与父窗体进行交互

  ——是一种阻塞式的对话框嗲用方式

  非模态对话框(Dialog->show())    用在特殊功能设置的场合,需要在堆上创建,在栈上创建的不能一直显示出来(需要指定Qt::WA_DeletteOnClose属性,在结束对话框后删除掉此对话框所使用的资源)

  ——显示后独立存在可以同时与父窗体进行交互

  ——是一种非阻塞式的对话框调用方式

  注: 可以通过QDialog::setModal函数可以创建混合特性的对话框。以非阻塞方式调用,但是是不可以操作父窗体的。

模态对话框实验:

  1、建立一个Qdialog对象

  2、调用对象的exec();进入消息循环

代码:

  

void Dialog::ModalBtn_Clicked()
{
    qDebug()<<"ModalBtn_Clicked() Begin";
//    QDialog* dialog = new QDialog(this);
//    dialog->exec();
    QDialog Dialog(this);
    Dialog.setWindowTitle("Modal Dialog");
    Dialog.exec();
    qDebug()<<"ModalBtn_Clicked() End";
}

运行结果:

  

 

 不能继续操作父窗体。

  非模态对话框实验:

  

void Dialog::NoremalBtn_Clicked()
{
    qDebug()<<"NoremalBtn_Clicked() Begin";
    QDialog* dialog = new QDialog(this);
    //Dialog dialog = new Dialog(this);
    dialog->setWindowTitle("Normoal Dialog");
    dialog->show();
    dialog->setAttribute(Qt::WA_DeleteOnClose);//关闭对话框自动删除 dialog 对象
    qDebug()<<"NoremalBtn_Clicked() End";

}

运行结果:

  

 

 显示后独立存在可以同时与父窗体进行交互,是一种非阻塞式的对话框调用方式

 混合特性的对话框:

   

void Dialog::MixedBtn_Clicked()
{
    qDebug()<<"MixedBtn_Clicked() Begin";
     QDialog* dialog = new QDialog(this);
     dialog->setAttribute(Qt::WA_DeleteOnClose);//关闭对话框自动删除 dialog 对象
     dialog->setModal(true);
     dialog->show();
    qDebug()<<"MixedBtn_Clicked() End";
}

 

对话框返回值:

  ——只有模态对话框才有返回值的概念,由于模态对话框是阻塞的

  ——模态对话框的返回值用户表示交互结果

  QDialog::exec()的返回值为交互结果

  ——void Qdialog::done(int i) 关闭对话框将参数作为交互结果

  ——QDialog::Accepted  用户操作成功

  ——Qdialog::Rejected   用户操作失败

 

posted @ 2020-02-05 16:31  Dipsyhu  阅读(1479)  评论(0编辑  收藏  举报