news 2026/2/3 15:38:32

Qt 中将 QWidget 改为模态的方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt 中将 QWidget 改为模态的方法

方法1:使用setWindowModality()

// 设置为应用程序模态(阻止与所有窗口交互) widget->setWindowModality(Qt::ApplicationModal); // 设置为窗口模态(只阻止与父窗口交互) widget->setWindowModality(Qt::WindowModal); // 设置为非模态 widget->setWindowModality(Qt::NonModal); // 示例 QWidget* modalWidget = new QWidget(); modalWidget->setWindowModality(Qt::ApplicationModal); modalWidget->show();

方法2:使用exec()方法(像 QDialog 一样)

// 自定义 QWidget 子类,添加 exec() 方法 class ModalWidget : public QWidget { Q_OBJECT public: ModalWidget(QWidget* parent = nullptr) : QWidget(parent) { setWindowFlags(Qt::Dialog); setWindowModality(Qt::ApplicationModal); } int exec() { show(); m_eventLoop.exec(); return m_result; } public slots: void accept() { m_result = QDialog::Accepted; close(); } void reject() { m_result = QDialog::Rejected; close(); } protected: void closeEvent(QCloseEvent* event) override { m_eventLoop.quit(); QWidget::closeEvent(event); } private: QEventLoop m_eventLoop; int m_result = QDialog::Rejected; }; // 使用 ModalWidget* widget = new ModalWidget(); if (widget->exec() == QDialog::Accepted) { qDebug() << "用户接受了"; }

方法3:使用setWindowModality+QEventLoop

FormVideoSnap *widget = new FormVideoSnap(nullptr); widget->setWindowModality(Qt::ApplicationModal); widget->setAttribute(Qt::WA_DeleteOnClose); QEventLoop loop; // 连接自定义aboutToClose 信号 QObject::connect(widget, &FormVideoSnap::aboutToClose, [this](const QString& filePath) { m_lastSnapshotFilePath = filePath; }); QObject::connect(widget, &FormVideoSnap::destroyed, &loop, &QEventLoop::quit); widget->show(); loop.exec(); // 阻塞直到窗口关闭
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/26 16:12:44

新手前端必看:5分钟搞懂IIFE的作用与实战妙用

新手前端必看&#xff1a;5分钟搞懂IIFE的作用与实战妙用 新手前端必看&#xff1a;5分钟搞懂IIFE的作用与实战妙用JavaScript 世界里的“一次性魔法”IIFE 到底是个啥从匿名函数到立即执行语法长什么样&#xff1f;经典写法和现代变体全解析为什么开发者离不开 IIFE隔离作用域…

作者头像 李华
网站建设 2026/2/3 13:31:25

【golang】goland使用多版本go sdk的方法

背景 由于最近手动清理了macos的缓存&#xff0c;包括go缓存&#xff0c;导致“项目X”中go1.24 sdk 环境没有了。我本地全局环境是go1.20.14。"项目X"使用的是go1.24环境。 解决方法 https://golang.google.cn/dl/ 手动下载go1.25.5压缩包, goland 偏好设置 goroo…

作者头像 李华
网站建设 2026/2/2 20:00:06

互联网大厂面试攻略:Java小白如何应对微服务与云原生技术

互联网大厂面试攻略&#xff1a;Java小白如何应对微服务与云原生技术 面试场景&#xff1a; 在某个阳光明媚的下午&#xff0c;Java小白程序员“超好吃”走进了一家互联网大厂的面试会议室。面试官是一位看似严肃但和蔼可亲的资深技术专家。以下是他们的对话&#xff1a; 第一轮…

作者头像 李华
网站建设 2026/2/2 5:12:43

中国传统国画开题报告

毕业设计开题报告申请日期&#xff1a; 年 月 日申请人宋体&#xff1b;小四指导老师申请课题名称课题类型理论课题 □实际应用课题□假设应用课题 □其它&#xff08; &#xff09;适用行业课题目标与要求一、目标本课题的核心目标是创建…

作者头像 李华
网站建设 2026/2/3 14:21:49

漫步烟台:历史的棱角,与生活的柔软弧度

晨光初现时&#xff0c;烟台的山海格局便已清晰展开。这座城市的气质&#xff0c;如同其海岸线的轮廓&#xff0c;既有历史沉淀的坚硬棱角&#xff0c;又有生活浸润的柔软弧度。烟台山是这一切的起点&#xff0c;它不仅是一座临海的小山&#xff0c;更像一处自然的观景台与历史…

作者头像 李华