zoukankan      html  css  js  c++  java
  • Qt对话框之二:模态、非模态、半模态对话框

    一、模态对话框

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

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


    示例代码1:

    MainWindow *pMainWindow = new MainWindow();
    pMainWindow->setWindowTitle(QStringLiteral("主界面"));
    pMainWindow->show();
     
    CustomWindow *pDialog = new CustomWindow(pMainWindow);
    pDialog->setWindowTitle(QStringLiteral("模态对话框"));
     
    // 关键代码
    pDialog->exec();
     
    // 关闭模态对话框以后才会执行下面的代码
    pMainWindow->setWindowTitle(QStringLiteral("主界面-模式对话框"));
    qDebug() << QStringLiteral("关闭模态对话框以后,可以继续向下执行");
    

    示例代码2:

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

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

    二、非模态对话框

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


    示例代码:

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

    三、半模态对话框

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


    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("立即运行");
    
    • 主界面被阻塞,不能进行点击、拖动等任何操作。
    • show()之后的代码却会立即执行。

    参考:

    Qt 之模式、非模式、半模式对话框


  • 相关阅读:
    springMVC,spring,mybatis全注解搭建框架--第一步,让框架跑起来
    实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件
    不带插件 ,自己写js,实现批量上传文件及进度显示
    excel转html 实现在线预览
    word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得
    实现图片旋转,滚动鼠标中间对图片放大缩小
    面试中常见问题之线程池与连接池的区别
    实例测试mysqlRR模式和RC模式各种锁情况
    分糖果
    MySQL试题
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/11546208.html
Copyright © 2011-2022 走看看