Qt: 窗体置顶,点击其他区域不最小化

Qt项目开发,有时候会从某个界面再打开一个界面,此时要保持新开的窗体保持在屏幕最前,也就是置顶,并且点击任何该窗体以外的区域都不受影响(不被最小化)。

研究了一段时间,找到了答案:

1. 设置窗体windowModality属性,设置为ApplicationModal

2. 代码中设置WindowFlag为WindowStaysOnTopHint

G::formCLRapid->setWindowFlags(G::formCLRapid->windowFlags() | Qt::WindowStaysOnTopHint);
G::formCLRapid->show();

实测有效,窗体打开之后就固定在屏幕最前,点击其他任何区域都不受影响,不会被最小化。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当将弹出窗口设置为`Qt::WindowStaysOnTopHint`(始终置顶)时,可能会导致QComboBox无法正常弹出。这是因为`Qt::WindowStaysOnTopHint`属性使得弹出窗口始终位于其他窗口之上,包括QComboBox的下拉菜单。 解决这个问题的一种方法是,在需要使用`Qt::WindowStaysOnTopHint`属性的弹出窗口中,临时禁用该属性,以允许QComboBox的下拉菜单正常弹出。当下拉菜单关闭后,再恢复弹出窗口的`Qt::WindowStaysOnTopHint`属性。 以下是一个示例代码: ```cpp // 创建弹出窗口 QDialog* popupDialog = new QDialog(parent); popupDialog->setWindowFlags(Qt::WindowStaysOnTopHint); // 创建QComboBox QComboBox* comboBox = new QComboBox(parent); // 当下拉菜单要弹出时,禁用弹出窗口的Qt::WindowStaysOnTopHint属性 QObject::connect(comboBox, QOverload<int>::of(&QComboBox::activated), [=](int index) { popupDialog->setWindowFlags(popupDialog->windowFlags() & ~Qt::WindowStaysOnTopHint); popupDialog->show(); // 延迟一段时间后恢复弹出窗口的Qt::WindowStaysOnTopHint属性 QTimer::singleShot(100, [=]() { popupDialog->setWindowFlags(popupDialog->windowFlags() | Qt::WindowStaysOnTopHint); popupDialog->show(); }); }); // 后续代码... ``` 在上述示例中,我们通过连接QComboBox的`activated`信号,当下拉菜单要弹出时,临时禁用弹出窗口的`Qt::WindowStaysOnTopHint`属性,并在一定延迟后恢复该属性。这样,在用户点击QComboBox以弹出下拉菜单时,弹出窗口将不会遮挡QComboBox的下拉菜单。 请注意,这只是一种解决方案,并不是通用的解决方法。具体实现可能需要根据您的应用程序需求进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹰信息技术服务部

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值