精华内容
下载资源
问答
  • 本文探究了模态与非模态对话框及其在QDialog中的代表方法。 模态对话框模态对话框是只能首先对其进行操作后才能操作其他窗口的对话框。 非模态对话框非模态对话框则是可以同时对它和其他窗口进行操作的对话框。

    模态与非模态对话框

    模态对话框

    模态对话框是只能首先对其进行操作后才能操作其他窗口的对话框。实质是父线程在子线程创建这个模态对话框后,父线程阻塞,等待子线程的操作。

    非模态对话框

    非模态对话框则是可以同时对它和其他窗口进行操作的对话框。实质是父子进程并行运行。

    QDialog

    概述

    The QDialog class is the base class of dialog windows.

    QDialog 类是对话框窗口的基类。用于创建对话窗口。

    继承关系

    class Q_WIDGETS_EXPORT QDialog : public QWidget
    

    QT 窗口模态

    模态种类

    enum WindowModality {
        NonModal,
        WindowModal,
        ApplicationModal
    };
    
    状态ConstantValue描述QDialog代表方法
    非模态Qt::NonModal0窗口不是模态,不会阻止其他窗口的操作QDialog::show()
    窗口模态Qt::WindowModal1窗口对单个窗口层次结构是模态,会阻止对其所有长辈(父窗口、祖父窗口、他们的兄弟姐妹)的操作,其子窗口不会阻止QDialog::open()
    应用模态Qt::ApplicationModal2窗口对应用程序是模态,并阻止对所有窗口的操作QDialog::exec()

    注意:窗口模态与应用模态都属于模态,只是WindowModal对局部模态,ApplicationModal对整个程序模态。

    设置模态

    定义

    class Q_WIDGETS_EXPORT QWidget : public QObject, public QPaintDevice
    {
    public:
        void setWindowModality(Qt::WindowModality windowModality);
    }
    

    使用

    QDialog dialog;
    dialog.setWindowModality(Qt::ApplicationModal);
    
    展开全文
  • 模态对话框:当焦点是该对话框时,在该对话框关闭之前,操作只能在该对话框内进行 非模态对话框:当窗口是该对话框时可切换焦点到任意窗口 ...#include <QDialog> #include //模态对话框 int main(int argc,char *argv[])

    模态对话框:当焦点是该对话框时,在该对话框关闭之前,操作只能在该对话框内进行
    非模态对话框:当窗口是该对话框时可切换焦点到任意窗口
    下面列举几种创建两种对话框的方法:
    模态对话框:
    方法一:

    #include <QApplication>
    #include <QDialog>
    #include <QWidget>
    //模态对话框
    int main(int argc,char *argv[])
    {
       QApplication app(argc,argv);
       QWidget w;
       QDialog dlg(&w);
       w.show();
       dlg.exec();
       return app.exec();
    }

    方法二:

    #include <QApplication>
    #include <QDialog>
    #include <QWidget>
    //模态对话框
    int main(int argc,char *argv[])
    {
       QApplication app(argc,argv);
       QWidget w;
       QDialog dlg(&w);
       dlg.setModal(true);
       w.show();
       dlg.show();
       return app.exec();
    }

    方法三:

    
    #include <QApplication>
    #include <QDialog>
    #include <QWidget>
    //模态对话框
    int main(int argc,char *argv[])
    {
       QApplication app(argc,argv);
       QWidget w;
       QDialog dlg(&w);
       //setWindowModality()设置模态对话框阻塞的窗口类型
       //Qt::ApplicationModal阻塞应用程序所有窗口
       //Qt::阻塞父窗口和子窗口 此时对于其他窗口属于非模态
       dlg.setWindowModality(Qt::ApplicationModal);
       w.show();
       dlg.show();
       return app.exec();
    }

    非模态对话框:
    方法一:

    #include <QApplication>
    #include <QDialog>
    #include <QWidget>
    //非模态对话框
    int main(int argc,char *argv[])
    {
       QApplication app(argc,argv);
       QWidget w;
       QDialog dlg(&w);
       w.show();
       dlg.show();
       return app.exec();
    }

    其他的是脱裤子放屁之举,不多余介绍·····································

    展开全文
  • /* * 模态对话框:会阻塞同一应用程序中其他窗口的输入,如“打开... QDialog dialog(this); dialog.setWindowTitle(tr("Hello,dialog!")); /* * 程序级别的模态:默认,当该种模态的对话框出现时,用户必须首先
        /*
         * 模态对话框:会阻塞同一应用程序中其他窗口的输入,如“打开文件”
         * 非模态对话框:与模态对话框相反,如“查找”对话框
         */
        QDialog dialog(this);
        dialog.setWindowTitle(tr("Hello,dialog!"));
        /*
         * 程序级别的模态:默认,当该种模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框
         *              然后才能访问程序中其他的窗口
         * 窗口级别的模态:该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其他窗口交互,适用
         *              于多窗口模式
         */
        dialog.exec();//程序级别的模态对话框
        dialog.open();//窗口级别的模态对话框
        QDialog *dialog1 = new QDialog;
        /****************防止内存泄露,2种方法**********************/
        dialog1->deleteLater();//函数设置对话框关闭时,自动销毁对话框
        dialog1->setAttribute(Qt::WA_DeleteOnClose);//在当前事件循环结束时销毁该对话框
        /*********************************************/
        dialog1->setWindowTitle(tr("Hello,dialog!"));
        dialog1->show();//非模态对话框

    展开全文
  • QT界面操作笔记2__对话框类QDialog一、模态和非模态二、自定义对话框三、标准对话框 一、模态和非模态 二、自定义对话框 三、标准对话框


    QDialog类是所有对话框窗口类的基类,对话框窗口是常用来完成简单任务或与用户完成简单交互的顶层窗口,QDialog继承自QWidget。

    按照运行当前QDialog时,用户是否还能与应用程序其他窗口互交,可将对话框窗口分为模态对话框和非模态对话框。窗口的模态、非模态、半模态的显示方式主要从三个方面进行区分:显示方式、其他窗口阻塞情况、代码阻塞情况

    1.模态对话框

    1、其他窗口状态: 当对话框以模态形式显示时,该应用程序的其他窗口处于未激活状态,无法接受键盘和鼠标的操作,必须关闭模态对话框才能对其他窗口进行操作。
    2、调用方式: 模态对话框一般采用exec()函数进行显示,当程序调用exec()显示窗口时候,代码在exec()处进行阻塞,需要关闭对话框,程序才会继续运行之后的代码;
    3、代码阻塞情况: 当关闭模态对话框时,exec()具有返回值,一般将对话框界面上的"确定"按钮连接槽函数"accept()",“取消"按钮连接"reject()”;或者采用done(int r)函数设置返回值。
    4、举例: 新建项目对话框;

    //创建MainWindow主界面;
    QMainWindow *my_MainWin = new QMainWindow();
    my_MainWin->setWindowTitle(QString::fromLocal8Bit("我是主界面"));
    my_MainWin->show();
    //创建QDialog子窗口;
    QDialog *my_Dlg = new QDialog(my_MainWin);
    my_Dlg->setWindowTitle(QString::fromLocal8Bit("我是模式对话框"));
    // 模式对话框显示
    my_Dlg->exec();
    // 关闭模态对话框以后才会执行下面的代码
    my_MainWin->setWindowTitle(QString::fromLocal8Bit("主界面-模式对话框"));
    

    2.非模态对话框

    1、其他窗口状态 当对话框以非模态对话框显示时,该应用程序的其他窗口可以正常使用;
    2、显示方式: 非模态对话框一般采用show()函数进行显示;
    3、代码阻塞情况: 在调用非模态对话框之后,代码正常运行,不会在对话框显示处发生阻塞。
    4、举例 word中的查找和替换对话框;

     QMainWindow *my_MainWin = new QMainWindow();
     my_MainWin->setWindowTitle(QString::fromLocal8Bit("我是主界面"));
     my_MainWin->show();
     //创建QDialog子窗口;
     QDialog *my_Dlg = new QDialog(my_MainWin);
     my_Dlg->setWindowTitle(QString::fromLocal8Bit("我是非模式对话框"));
     // 模态对话框显示
     my_Dlg->show();
     // 以下代码会继续执行
     my_MainWin->setWindowTitle(QString::fromLocal8Bit("主界面-非模式对话框"));
    

    3.半模态对话框

    半模态对话框一词是借用于博客一去二三里,由于该形式的对话框,介于模态对话框和非模态对话框之间,因此称为半模态也算是比较形象。

    1、其他窗口状态: 当对话框以半模态形式显示时,该应用程序的其他窗口处于未激活状态,无法接受键盘和鼠标的操作,必须关闭该对话框才能对其他窗口进行操作。
    2、显示方式: 调用setModal(true)或者setWindowModality(),然后show()。
    3、代码阻塞情况: 在调用非模态对话框之后,代码正常运行,不会在对话框显示处发生阻塞。
    4、举例: 进度条对话框;

    //创建MainWindow主界面;
    QMainWindow *my_MainWin = new QMainWindow();
    my_MainWin->setWindowTitle(QString::fromLocal8Bit("我是主界面"));
    my_MainWin->show();
    //创建QDialog子窗口;
    QDialog *my_Dlg = new QDialog(my_MainWin);
    my_Dlg->setWindowTitle(QString::fromLocal8Bit("我是半模式对话框"));
    // 非模态对话框显示
    my_Dlg->setModal(true);
    my_Dlg->show();
    // 以下代码会继续执行
    my_MainWin->setWindowTitle(QString::fromLocal8Bit("主界面-半模式对话框"));
    

    4.窗口模态设置

    • setModal()函数:

      void setModal(bool modal);
      当modal为true时为模态窗口,false时为非模态窗口;

    • setWindowModality()函数:

      void setWindowModality(Qt::WindowModality windowModality);

      • Qt::NonModal:不阻塞任何窗口,非模态。
      • Qt::WindowModal:阻塞父窗口、所有祖先窗口以及子窗口。
      • Qt::ApplicationModal:阻塞整个应用程序所有窗口。
        setModal()函数的默认设置是,Qt::ApplicationModal。
    • 获取窗口模态性;
      • Qt::WindowModality windowModality() const; // 返回窗口的模态性
      • bool isModel() const; // 当窗口为模态窗口是返回true,否则为false

    参考资料

    1、《Qt creater 快速入门》

    展开全文
  • QDialog模态与非模态

    千次阅读 2019-01-31 17:57:59
    窗口是否是模态和窗口(包括QDialog和QWidget等)的exec()和show() 等函数无直接关系,只和窗口属性有关。使用以下两种方式都可以进行: setAttribute(Qt::WA_ShowModal, true); // 属性设置方式setWindowM...
  • Qt创建的对话框类型,打开时有两种方式模态与非模态,对应着exec与show,这两种方式存在的区别如下:
  • QT QDialog模态对话框与非模态对话框 (setModal) 模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在。又有叫法是称为模式对话框,无模式对话框等...
  • 模态对话框是指在没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互,比如新建项目时弹出的对话框。 非模态对话框是指既可以和它交互,也可以与同一程序中的其他窗口交互,如word中...QDialog&gt; ...
  • 1. 设置窗口一直保持在顶层,但是不阻塞用户操作其他窗口 1.1 QDialog ... //设置半模态 exe后面代码不能执行,但可以操作其他窗口 dlg.exec(); 1.2 QWidget QWidget widget(this); widget.setWindowFl
  • Qt模态和非模态对话框简述 QDialog类是所有对话框窗口的基类。按照运行对话框是否可以和此程序 的其他界面进行交互,分为两类:模态、非模态 非模态 QDialog *dialog = new QDialog(this); dialog-&gt;show...
  • QDialog dlg(this); //指定父窗口,可以让你的任务栏不显示标记,否则和QWidget效果一样 dlg.setModal(false); dlg.Show(); if(dlg.exec() == QDialog::Accepted) { qDebug() << QString:...
  • QtQDialog为“窗口”,而QWidget为“部件”,首先还是了解下《Qt 窗口与部件的概念》。 对于QDialog模态及非模态是直接可以实现的,很多课本中都会提到,此处总结下。 模态QDialog 方式一: QDialogdlg...
  • Qt模态和非模态对话框 Qt 支持模态对话框和非模态对话框。其中,Qt 有两种级别的模态对话框:应用程序级别的模态和窗口级别的模态,默认是应用程序级别的模态。应用程序级别的模态是指,当该种模态的对话框出现时,...
  • QDialog模态对话框与非模态对话框

    千次阅读 2016-08-25 16:29:30
    QT QDialog模态对话框与非模态对话框 (setModal) 模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在。又有叫法是称为模式对话框,无模式...
  • Qt - QDialog,QWidget实现模态及非模态.pdf
  • QT模态对话框及非模态对话框学习  http://blog.sina.com.cn/s/blog_6143523a0100rxvl.html QT模态对话框及非模态对话框 模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在...
  • Qt 模态与非模态

    2021-03-31 00:28:42
    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog) 模态窗体 在该窗体没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,与切换,知道该对话框窗体关闭。 QDialog *dialog = new QDialog(this);...
  • Qt 中使用QDialog类实现对话框。我们的对话框通常继承自QDialog。对话框分为模态对话框和非模态对话框。所谓模态对话框,就是会阻塞同一应用程序中其它窗口的输入。 ...
  • QDialog 对话框 非模态 QDialog * dlg = new QDialog() dlg-&gt;show();  当然,这儿用指针(即分配到heap中)不是必须的。 (有疑问?或者有时发现窗口一闪而过?那么你需要了解C、C++中变量的作用域和生存...
  • 关于Qt模态窗口的设置

    千次阅读 2020-06-21 10:39:19
    目前,Qt中设置窗口模态是通过 QWidget 的 setWindowModality() 函数: 参数有三种枚举: Qt::NonModal :(=0)表示该窗口不是模态窗口,不会阻止其他窗口的输入。 Qt::WindowModal :(=1)表示该窗口是...
  • Qt模态设置

    2021-05-29 09:24:03
    新产生的窗口从哪里继承过来: 1. class myDialog : public QDialog void study_mainWin::on_pushButton_clicked() { myDialog *dialog = new myDialog();... //如果是myDialod继承于QDialog,则使用该方法设置非模态
  • 模态窗口弹出时,不能进行其它窗口的交互,非模态窗口弹出时,可以进行其它窗口的交互。 #include "mywidget.h" #include "ui_mywidget.h" #include <QDialog> MyWidget::MyWidget(QWidget *parent) : ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,035
精华内容 814
关键字:

qdialogqt模态