QDialog不阻塞父窗口UI交互的实现方法之一

本文介绍在Qt中如何使对话框非模态显示,以便点击对话框外的父窗口仍能接收UI消息。通过设置对话框为非模态,并使用show而非exec方法,实现了父窗口与对话框的交互,同时保持了对话框的独立性和响应性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目分析,最近做的项目遇到了一个问题,需求是点击弹出的对话框以外的程序界面,窗口响应相应的动作

  • 首先,因为要接受对话框的执行结果,弹出对话框用exec是默认设定是模态显示,也就是会阻塞父窗口UI交互,
QDialog dlg(this);
if(dlg.exec() == QDialog::Accepted)
{
	qDebug() << QString::fromLocal8Bit("确认对话框");
}
else
{
	qDebug() << QString::fromLocal8Bit("拒绝对话框");
}

但是要求点击对话框以外的窗口父窗口能够接受到UI消息,而不是被dlg拦截,所以这种方式我们似乎无法实现,要么重写exec(),其实还有一种比较简单的方法;代码如下:

	QDialog dlg(this);					//指定父窗口,可以让你的任务栏不显示标记,否则和QWidget效果一样
	dlg.setModal(false);
	dlg.Show();
	if(dlg.exec() == QDialog::Accepted)
	{
		qDebug() << QString::fromLocal8Bit("确认对话框");
	}
	else
	{
		qDebug() << QString::fromLocal8Bit("拒绝对话框");
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值