Qt设置窗口置顶(避免窗口隐藏)

转自个人博客


方法一

说在前面:本方法比较通用,但经过我的使用,发现其存在问题,而下面方法二正常使用

存在问题:在窗口置顶后,会自动隐藏,即便在设置窗口置顶后手动对窗口使用show()setVisible(true)等方法显示出来,也会出现窗口闪烁的现象,极不自然。

对你的主窗口QMainWindow或者主控件QWidget使用以下方法,都是Qt自带的。

窗口置顶也是一个标志,先获取窗口已有的所有标志,再添加/移除置顶标志:

Qt::WindowFlags flags = windowFlags();
setWindowFlags(flags | Qt::WindowStaysOnTopHint); // 添加置顶
Qt::WindowFlags flags = windowFlags();
setWindowFlags(flags & ~Qt::WindowStaysOnTopHint); // 移除置顶

可以一步到位:

setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); // 添加置顶
setWindowFlags(windowFlags() & ~Qt::WindowStaysOnTopHint); // 移除置顶

但是这个方法会自动调用隐藏hide(),只能手动使用show()setVisible(true)等方法显示出来


方法二

同样,对你的主窗口QMainWindow或者主控件QWidget使用以下方法,也都是Qt自带的。

windowHandle()中获取并设置窗口标志,避免自动调用hide()导致窗口隐藏的问题。

setWindowFlags()windowHandle()->setFlags()代替,

windowFlags()windowHandle()->flags()代替。

添加置顶:

windowHandle()->setFlags(windowHandle()->flags() | Qt::WindowStaysOnTopHint); // 添加置顶

移除置顶:

windowHandle()->setFlags(windowHandle()->flags() & ~Qt::WindowStaysOnTopHint); // 移除置顶

你可能感兴趣的:(qt)