目录
1、简述
为了某些项目的需求,特意研究了一下Qt窗口强制永久置顶的方法。
2、方法1:Qt+Windows系统API
这种方法适合Windows系统上,应用强制置顶
2.1、效果
2.2、引用
pro文件中调用Windows提供库:
LIBS += -lUser32
头文件
#include "Windows.h"
2.3、定义QTimer
QTimer *m_timer;
2.4、核心代码
m_timer = new QTimer();
m_timer->start(1000); //程序每隔1秒置顶一次
connect(m_timer, &QTimer::timeout, [=]{
#ifdef Q_OS_WIN32
SetWindowPos((HWND)this->winId(),HWND_TOPMOST,this->pos().x(),this->pos().y(),this->width(),this->height(),SWP_SHOWWINDOW);
#endif //要在windows上不获取焦点切置顶,必须用Windows API
});
3、方法二:Qt的WindowStaysOnTopHint
在Qt5中,最常用的窗口置顶方法是设置窗口标志(Window Flags)。
具体来说,就是使用Qt::WindowStaysOnTopHint这个标志
#include <QMainWindow>
// ...
QMainWindow window;
window.setWindowFlags(Qt::WindowStaysOnTopHint);
window.show();
这里,setWindowFlags函数用于设置窗口标志。Qt::WindowStaysOnTopHint则是QT预定义的一个标志,用于使窗口保持在所有其他窗口的顶部。
使用raise()和activateWindow()函数
除了使用窗口标志外,还可以使用raise()和activateWindow()函数来将窗口置于顶部。
window.raise();
window.activateWindow();
这两个函数通常一起使用,以确保窗口不仅置顶,而且获得焦点。
4、总结语
两种方法各有千秋,个人还是喜欢用第一种。Qt 虽然已经做的不错了,但毕竟不是各个系统的亲儿子,调用各个系统的API还是要更给力一些