本文最后更新于 97 天前,其中的信息可能已经有所发展或是发生改变。
方法一
说在前面:本方法比较通用,但经过我的使用,发现其存在问题,而下面方法二正常使用
存在问题:在窗口置顶后,会自动隐藏,即便在设置窗口置顶后手动对窗口使用
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); // 移除置顶