• QT Qdialog的对话框模式以及其关闭


    模式对话框

    描述

    阻塞同一应用程序中其它可视窗口输入的对话框。模式对话框有自己的事件循环,用户必须完成这个对话框中的交互操作,并且关闭了它之后才能访问应用程序中的其它任何窗口。模式对话框仅阻止访问与对话相关联的窗口,允许用户继续使用其它窗口中的应用程序。

    显示模态对话框最常见的方法是调用其exec()函数,当用户关闭对话框,exec()将提供一个有用的返回值,并且这时流程控制继续从调用exec()的地方进行。通常情况下,要获得对话框关闭并返回相应的值,我们连接默认按钮,例如:”确定”按钮连接到accept()槽,”取消”按钮连接到reject()槽。另外我们也可以连接done()槽,传递给它Accepted或Rejected。

    效果

    这里写图片描述

    退出

      我们可以通过调用accept()或者是reject()函数来是使得exec()函数结束代码如下:

    //可以在之前的代码的快要结束的额时候调用accept();然后在主函数中
    login *user_login=new login;//login是继承dialog的类
    	int res = user_login->exec();
    	if (res == QDialog::Accepted)
    	{
    		delete user_login;
    	}
    

      

    源码

    MainWindow *pMainWindow = new MainWindow();
    pMainWindow->setWindowTitle(QStringLiteral("主界面"));
    pMainWindow->show();
    
    CustomWindow *pDialog = new CustomWindow(pMainWindow);
    pDialog->setWindowTitle(QStringLiteral("模式对话框"));
    
    // 关键代码
    pDialog->exec();
    
    // 关闭模态对话框以后才会执行下面的代码
    pMainWindow->setWindowTitle(QStringLiteral("主界面-模式对话框"));
    qDebug() << QStringLiteral("关闭模态对话框以后,可以继续向下执行");
    1. 主界面被阻塞,不能进行点击、拖动等任何操作。
    2. exec()之后的代码不会执行,直到关闭模态对话框。

    非模式对话框

    描述

    和同一个程序中其它窗口操作无关的对话框。在文字处理中的查找和替换对话框通常是非模式的,允许用户同时与应用程序的主窗口和对话框进行交互。调用show()来显示非模式对话框,并立即将控制返回给调用者。

    如果隐藏对话框后调用show()函数,对话框将显示在其原始位置,这是因为窗口管理器决定的窗户位置没有明确由程序员指定,为了保持被用户移动的对话框位置,在closeEvent()中进行处理,然后在显示之前,将对话框移动到该位置。

    效果

    这里写图片描述

    源码

    MainWindow *pMainWindow = new MainWindow();
    pMainWindow->setWindowTitle(QStringLiteral("主界面"));
    pMainWindow->show();
    
    CustomWindow *pDialog = new CustomWindow(pMainWindow);
    pDialog->setWindowTitle(QStringLiteral("非模式对话框"));
    
    // 关键代码
    pDialog->show();
    
    // 下面的代码会立即运行
    pMainWindow->setWindowTitle(QStringLiteral("主界面-非模式对话框"));
    qDebug() << QStringLiteral("立即运行");
    1. 主界面不会被阻塞,可以进行点击、拖动等任何操作。
    2. show()之后的代码会立即执行。

    半模式对话框

    描述

    调用setModal(true)或者setWindowModality(),然后show()。有别于exec(),show() 立即返回给控制调用者。

    对于进度对话框来说,调用setModal(true)是非常有用的,用户必须拥有与其交互的能力,例如:取消长时间运行的操作。如果使用show()和setModal(true)共同执行一个长时间操作,则必须定期在执行过程中调用QApplication ::processEvents(),以使用户能够与对话框交互(可以参考QProgressDialog)。

    效果

    这里写图片描述

    源码

    MainWindow *pMainWindow = new MainWindow();
    pMainWindow->setWindowTitle(QStringLiteral("主界面"));
    pMainWindow->show();
    
    CustomWindow *pDialog = new CustomWindow(pMainWindow);
    pDialog->setWindowTitle(QStringLiteral("半模式对话框"));
    
    // 关键代码
    pDialog->setModal(true);
    pDialog->show();
    
    // 下面的代码会立即运行
    pMainWindow->setWindowTitle(QStringLiteral("主界面-半模式对话框"));
    qDebug() << QStringLiteral("立即运行");
    1. 主界面被阻塞,不能进行点击、拖动等任何操作。
    2. show()之后的代码会立即执行。

    原文:https://blog.csdn.net/liang19890820/article/details/51067310

  • 相关阅读:
    二叉搜索树
    splay模板
    树状数组模板
    K尾相等数
    寻找最大数
    布线问题(最小生成树)
    开心的小明
    独木舟上的旅行(二)
    The Triangle(记忆化搜索)
    喷水装置(二)
  • 原文地址:https://www.cnblogs.com/yskn/p/9390967.html
Copyright © 2020-2023  润新知