zoukankan      html  css  js  c++  java
  • 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   用户操作失败

  • 相关阅读:
    mssql锁
    gridview 分页兼容BOOTSTRAP
    BOOTSTRAP前端模板
    bootstrap 简单模板
    ajax 跨域访问的解决方案
    webapi之权限验证
    webapi权限常见错误
    ajax跨域解决方案
    iis 部署webapi常见错误及解决方案
    OOM AutoMapper的简单实用
  • 原文地址:https://www.cnblogs.com/hjxzjp/p/12264331.html
Copyright © 2011-2022 走看看