Qt基础:三、模态和非模态对话框

2023-10-27

QDialog类是所有对话框窗口类的基类。对话框窗口是一个经常用来完成短小任务或者和用户进行简单交互的顶层窗口。按照运行对话框时是否还可以和该程序的其他窗口进行交互,对话框常被分为两类:模态的(modal 阻塞)和非模态的(modeless 非阻塞)。
1、直接创建对象,但是对话框会一闪而过

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    QDialog dialog(this);
    dialog.show();
}

因为对于一个函数中定义的变量,等这个函数执行结束后,它就会自动释放。也就是说,这里的 dialog对象只在这个构造函数中有用,等这个构造函数执行完了,dialog 也就消失了。

2、为了不让 dialog 消失,可以将 QDalog 对象的创建代码更改如下:

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);

    QDialog dialog(this);
    dialog.exec();
}

这时运行程序就会发现对话框弹出来了,但是MyWidget 窗口并没有出来,只有当关闭对话框后,MyWidget 窗口才弹出来。这个对话框与前面那个对话框的效果不同,称它为模态对话框,而前面那种对话框称为非模态对话框

模态对话框就是在没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互,比如新建项目时弹出的对话框。而对于非模态对话框,既可以与它交互,也可以与同一程序中的其他窗口交互,如Microsoft Word 中的查找替换对话框。就像前面看到的,要想使一个对话框成为模态对话框,则只需要调用它的 exec()函数;而要使其成为非模态对话框,则可以使用 new 操作来创建,然后使用 show()函数来显示。其实使用show()函数也可以建立模态对话框,只须在其前面使用setModal()函数即可。

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);

    QDialog *dialog = new QDialog(this);
    dialog->setModal(true);
    dialog->show();
}

此时运行起来对话框和主界面都可以显示出来了,但是只有关闭模态对话框以后,才可以点击主界面

运行程序后可以看到,生成的对话框是模态的。但是,它与用exec()函数时的效果是不一样的,因为现在的MyWidget 窗口也显示出来了。这是因为调用完show()函数后会立即将控制权交给调用者,程序可以继续往下执行。而调用exec()函数却不同,只有当对话框被关闭时才会返回。与setModal()函数相似的还有一个setWindowModality()函数,它有一个参数来设置模态对话框要阻塞的窗口类型,可以是Qt::NonModal(不阻塞任何窗口,就是非模态)Qt::WindowModal(阻塞它的父窗口所有祖先窗口以及它们的子窗口)或Qt::ApplicationModal阻塞整个应用程序的所有窗口)。而setModal()函数默认设置的是Qt::ApplicationModal。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt基础:三、模态和非模态对话框 的相关文章

  • 在没有加载器的情况下实例化内联组件

    有没有办法实例化内联Component 即在同一文件中定义 而不使用Loader 我不太关心使用的性能影响Loader因为我要用很多东西污染我的文件Loader包装纸 我发现从 JavaScript 创建动态 QML 对象 http doc
  • 如何让小部件在上下文菜单出现时接收鼠标释放事件

    在Ubuntu20 04上 当上下文菜单出现时 我无法让小部件接收鼠标释放事件 而Windows可以接收 我的pyqt版本是5 15 2 我考虑过手动发送鼠标释放事件 但我不知道当上下文菜单出现时哪些系统会收到鼠标释放事件 这样做可能会导致
  • Qt 为什么使用 QString::number() 而不是 QLocale().toString()?

    我正在开发的应用程序将在许多国家推出 并且需要支持他们的语言 我一直在回顾我的代码并替换以下每个实例 QString number and QString toDouble with QLocale toString and QLocale
  • 如何声明一个带有成员函数指针的函数

    我有一个类 其中的成员变量指向库对象 class myClassA private libraryClass libraryObject 该库类发出事件 以字符串为特征 并提供一种机制 允许客户端类指定在发出事件时应调用的成员函数 因此在m
  • 在 Qt 中使用多个不同的流读取同一文件

    使用 Qt 是否可以使用多个流读取文件以同时访问其中的不同数据部分 请注意 Qt 中的流 QTextStream QDataStream 不处理底层设备中的位置 流类只是一个包装器 用于更轻松地解析设备 QFile 实例 内的二进制数据 因
  • Qt:不完整类型和前向声明的使用无效

    我有一些误解 A h ifndef A H define A H include B h class A public B Q OBJECT public A endif A cpp include A h A A B ui gt blan
  • 覆盖 QWebView 中的页面回复

    我试图在 Qt 的 QWebView 中拦截页面 表单请求 并在某些情况下使用替代内容进行响应 QNetworkReply ngcBrowser createRequest Operation operation const QNetwor
  • 如何将自定义 Qt 类型与 QML 信号一起使用?

    我在 Qt 5 2 qml 应用程序中创建了一个自定义类型 class Setting public QObject Q OBJECT Q PROPERTY QString key READ key WRITE setKey Q PROPE
  • 连接到 QNetworkReply::error 信号

    我正在使用 Qt5 的新连接语法 QNetworkReply 有一个名为error http qt project org doc qt 5 0 qtnetwork qnetworkreply html error 2还有一个函数叫做err
  • QTabWidget 选项卡在垂直方向,但文本在水平方向

    我正在尝试用 C Qt 制作一个带有这样的侧边栏的应用程序 但是当将 QTabWidget 方向设置为西时 它会使文本垂直 如何让文本位于左侧 但水平对齐 PS 我不需要图标 提前致谢 您可以使用QListWidget http doc q
  • 通过单击内部小部件而不是标题栏来移动窗口

    在 Windows 中 当我创建 QMainWindow 时 我可以通过单击标题栏并拖动它来在屏幕上移动它 在我的应用程序中 我使用隐藏了标题栏setWindowFlags Qt CustomizeWindowHint 我正在尝试使用小部件
  • 为什么 QT 设计器重新调整大小或不允许我缩小或展开小部件或按钮?

    很多时候 在使用 QT 设计器时 我发现自己需要通过缩小或扩展来调整事物的大小 每当我尝试这样做时 程序都不允许我这样做 而只是恢复到将对象放置在窗口中时给我的原始默认大小 无论我的布局如何 为什么要这样做 是否有可能改变这一点 以便我可以
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 使 QLabel 的像素图透明

    我有一个带有 QLabel 和像素图的主窗口 我想让它透明 或不那么不透明 我正在使用下面的代码 ui gt label gt setAttribute Qt WA TranslucentBackground ui gt label gt
  • 是否可以根据 QSlider 的位置来改变其手柄的颜色?

    我非常清楚如何通过样式表自定义 QSlider 但我想知道是否可以执行以下操作 我希望滑块的手柄从蓝色变为黄色 当设置在左侧时 它是蓝色的 设置在左侧时 它是蓝色的 当你将它向右移动时 它会出现从蓝色到黄色的渐变 如果可以通过样式表 如何实
  • Qt:更改 Mac OS X 上的应用程序 QMenuBar 内容

    我的应用程序对多个 页面 使用 QTabWidget 其中顶级菜单根据用户所在的页面而变化 我的问题是 尝试重新创建菜单栏的内容会导致严重的显示问题 它在除 Mac OS X 之外的所有平台上按预期使用第一种和第三种样式 尚未测试第二种 但
  • Qt 相当于 .NET 数据绑定吗?

    Qt 中是否有相当于 NET 数据绑定的功能 我想使用引用数据库中特定实体的 QString 填充一些组合框和其他小部件 但是 如果我可以将数据绑定到这些字符串 而不是基于新的组合框选择再次查询数据库 或者基于构建我自己的将使用 QStri
  • 使用 C++ 访问 Azure blob 存储 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • QByteArray 到整数

    正如您可能从标题中看出的那样 我在转换QByteArray为一个整数 QByteArray buffer server gt read 8192 QByteArray q size buffer mid 0 2 int size q siz
  • 一个具有完全透明背景的qt小部件

    我需要创建一个 qt 小部件 它将充当其他一些小部件的父级 并对它们进行排序 现在的问题是如何使其背景完全透明 我想这样做 struct Imp Imp QWidget parent thisWidget new QWidget paren

随机推荐

  • git提交出现remote rejected master -> XX changes closed

    问题现象 提交git的时候出现 remote rejected master gt refs for master change http XXXX com myreview changes 1721438 closed error fai
  • 制作精良讲解清晰的Lumen原理

    老奇 阴差阳错 撼动世界的游戏引擎 哔哩哔哩 bilibili 推荐一个制作精良讲解清晰的Lumen原理视频给大家 这种有营养但又很可口的技术科普视频 来之不易啊
  • WPF,如何让TextBox中的文字垂直居中

    VerticalContentAlignment Center
  • 基础算法题——位运算之谜(数论)

    位运算之谜 题目链接 数论 a b a xor b 2 a b 变式可得 a xor b a b 2 a b 另外还要排除两种不能被组成的情况 a b 2 a b lt 0 a xor b最小为0 不存在小于0的值 a b a b 2 a
  • WebRTC 用例和性能

    WebRTC 用例和性能 实现低延迟 点对点传输是一项艰巨的工程挑战 有 NAT 遍历和连接检查 信令 安全 拥塞控制和无数其他细节需要处理 WebRTC 代表我们处理以上所有内容 这就是为什么它可以说是自网络平台成立以来最重要的补充之一
  • undefined symbol: cublasLtGetStatusString, version libcublasLt.so.11

    三段式 现象 分析 总结 方法 是理解提升能力的最佳思维模式 1 现象 在cuda 版本是最新的11 8 运行torch写的模型 import torch报出来的错误 2 分析 网上很多是说torch版本和cuda版本不一致 去官网按照版本
  • FatFS的文件操作

    1 文件操作 1 1 f open 打开 创建文件 FRESULT f open FIL fp OUT Pointer to the file object structure const TCHAR path IN File name B
  • WEB前端网页设计-Bootstrap 按钮下拉菜单

    目录 Bootstrap 按钮下拉菜单 分割的按钮下拉菜单 按钮下拉菜单的大小 按钮上拉菜单 Bootstrap 按钮下拉菜单 本章将讲解如何使用 Bootstrap class 向按钮添加下拉菜单 如需向按钮添加下拉菜单 只需要简单地在一
  • c# 简单httpGet、httpPost方法以及http提交Form表单

    httpGet和httpPost public static class HttpHelper
  • 安装Nginx教程(CentOS8)

    这件事是不是神迹 并不重要 重要的是神感动了我 低俗小说 此文针对centos8操作 1 centos8安装完毕后安装基本工具 yum install gcc openssl openssl devel pcre pcre devel zl
  • postman重新安装后collection数据恢复

    目录 前言 恢复collection数据 前言 记录postman重新安装后collection数据恢复的方法 恢复collection数据 1 登录postman账号后 选择My Workspace 点击import 2 点击Upload
  • Linux Polkit权限提升漏洞(CVE-2021-4034)

    漏洞描述 Linux Polkit权限提升漏洞 CVE 2021 4034 是由于pkexec无法正确处理调用参数 从而将环境变量作为命令执行 具有任意用户权限的攻击者都可以在默认配置下通过修改环境变量来利用此漏洞 从而获得受影响主机的ro
  • 猜数字小游戏

    猜数字小游戏 有随机数 保底机制玩法 package pxc cn import java util Random import java util Scanner public class sc public static void ma
  • MATLAB仿真噪声信号、单多音信号、LFM、2ASK、2FSK、BPSK、16QAM

    文章目录 背景 1 高斯白噪声 2 噪声调幅信号 3 噪声调频信号 4 单音信号 5 多音信号 6 线性扫频信号 7 2ASK信号 8 2FSK信号 9 BPSK信号 10 16QAM信号 缩略对照表 背景 临近毕业整理毕业论文的资料时 看
  • 登录框漏洞

    继上次登陆框引起的血案这个文章之后 时隔一个月笔者又写了续集 呃 升华版 0 00 文章内容结构图 0 01 信息泄露 利用泄露的信息可以大大增加我们的可测试点 从而增加我们的成功率 1 HTML源代码 必看的肯定要属HTML源代码了 源代
  • JavaScript学习笔记:动态集合

    DOM是JavaScript中重要部分之一 在DOM中有一个动态集合 这个动态集合包含节点的集合 NodeList 元素属性的集合 NamedNodeMap 和HTML元素的集合 HTMLCollection 这三个对象都是类数组 Arra
  • 从AD域获取用户AD信息

    public static Dictionary
  • 一个失败的项目

    转眼间 入职已经一年了 在这一年里 我一直在一个项目组 至今这个项目还没有结束 其实说起来这也是一个不大的项目 可是做起来却令人非常头疼 我的同事已经有好几个离开这个项目组了 对于公司来说 这个项目也像是一个鸡肋 首先 这个项目的需求做得不
  • 数据挖掘作业5(个数据库有5个事务,如下表所示。设min_sup=60%,min_conf=80%)

    5 7一个数据库有5个事务 如下表所示 设min sup 60 min conf 80 1 分别用Apriori算法和FP growth算法找出所有频繁项集 比较两种挖掘方法的效率 2 比较穷举法和Apriori算法生成的候选项集的数量 3
  • Qt基础:三、模态和非模态对话框

    QDialog类是所有对话框窗口类的基类 对话框窗口是一个经常用来完成短小任务或者和用户进行简单交互的顶层窗口 按照运行对话框时是否还可以和该程序的其他窗口进行交互 对话框常被分为两类 模态的 modal 阻塞 和非模态的 modeless