Qt 窗口置顶

在项目中常有需求,需要将弹出的窗口进行置顶(比如设置窗口),如果是在同一个进程内的窗口那我们可以使用QDialog来做,但是如果是启动外部其他进程呢?这里我们就讲一下后面这种情况如何处理。

一下操作都是在需要制定的那个窗口程序中的操作。

1.在构造函数中设置窗口的制定属性

/**  在X11的桌面环境中需要Qt::X11BypassWindowManagerHint ,Windows下无需此属性 */
setWindowFlags(windowFlags()| Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);

2.如果窗口中有输入框等输入控件,那么有可能会出现无法输入获取焦点,所以需要如下操作

void PSetting::showEvent(QShowEvent *event)
{
    setWindowFlags(windowFlags()| Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
/** 激活当前窗口 */
    activateWindow();
}

3.当鼠标点击该窗口之外的其他窗口时,又可能导致无法获取焦点,所以我们还需要在进一步处理一下

void PSetting::enterEvent(QEvent *event)
{
    setWindowFlags(windowFlags()| Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
    activateWindow();
}

4.当我们需要在该置顶窗口再进行弹出窗口的时候就需要特别注意了,弹出窗口也需要跟此窗口做一样的操作,例如

void PSetting::on_pushButton_4_clicked()
{
    QMessageBox box(QMessageBox::Information,"Set","保存成功",QMessageBox::NoButton,this);
    box.setStandardButtons (QMessageBox::Ok);
    box.setButtonText (QMessageBox::Ok,QString("确 定"));
/** Message只有按钮所以只做了置顶操作 */
    box.setWindowFlags(box.windowFlags()| Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
    box.exec();
}

到此就是我自己的实现,如果有更好的方法或不同的请留言告诉我,我也去学习一下

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值