qt中置顶窗口一般都知道用这个函数:

this->setWindowFlags(Qt::FramelessWindowHint);

但是这样会有一个问题:

当我在程序启动显示窗口的时候,不停的点击其他窗口,使当前运行的程序窗口获取不到焦点,那么程序窗口即使设置了FramelessWindowHint flag,

主窗口也并没有置顶。代码如下:

main.cpp

#include "mainwindow.h" #include <QApplication> int main(int argc, char
*argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec();
}#include "mainwindow.h" #include <QApplication> #include <QDesktopWidget>
#include <QThread> MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent) {
this->setFixedSize(QSize(QApplication::desktop()->width(),
QApplication::desktop()->height())); // 一般情况下会自定义关闭按钮
this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
this->setAutoFillBackground(true); // 假设有其他资源需要初始化,如果构造时间较短,不容易看到效果。
QThread::sleep(1); } MainWindow::~MainWindow() { }

程序开始运行后不停点击其他窗口(如QtCreator),就会发现窗口程序出现在任务栏,但是窗口并没有置顶。

具体原因还有待进一步研究。

尝试多种解决办法:

1.点击一个按钮后show出一个子置顶窗口。 (无效)

2.点击一个按钮后show出一个新的窗口(subwindow属性,父窗口为空,用智能指针管理内存)。(有效,但是新show出来的窗口不能响应事件,被最开始的窗口覆盖掉了);

...

后来想到直接用windows的置顶窗口的函数,但是还是会出现刚开始的那个问题。

然后尝试其他各种怪招。。。

最后无意之间将show();这句代码写到置顶窗口的构造函数就行了!

最终代码如下:

main.cpp

#include "mainwindow.h" #include <QApplication> #include <windows.h> int
main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; //[!]
新增代码, 需要在.pro文件加上 LIBS += -lUser32 ::SetWindowPos((HWND)w.winId(),
HWND_TOPMOST, 0, 0, w.width(), w.height(), SWP_NOMOVE | SWP_NOSIZE |
SWP_SHOWWINDOW); return a.exec(); }mainwindow.cpp
#include "mainwindow.h" #include <QApplication> #include <QDesktopWidget>
#include <QThread> MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent) {
this->setFixedSize(QSize(QApplication::desktop()->width(),
QApplication::desktop()->height())); // 一般情况下会自定义关闭按钮
this->setWindowFlags(Qt::FramelessWindowHint/*|Qt::WindowStaysOnTopHint*/);//
[!]需要注释qt的置顶属性 this->setAutoFillBackground(true); //
假设有其他资源需要初始化,如果构造时间较短,不容易看到效果。 QThread::sleep(1); //[!]新增代码 show(); }

技术
©2019-2020 Toolsou All rights reserved,
LinkedHashMap基本用法&使用实现简单缓存 dedecms网站被黑 劫持到其他网站如何解决苹果不送充填器耳机真为环保?可能还是为了赚钱吧图片格式转换错误总结-myBatis plus 分页numpy:多维数组的创建用C语言做很简单的飞机游戏Keras保存与加载模型(JSON+HDF5)福布斯中国汽车富豪榜:何小鹏第11 李想第14 李斌第15hive大量小文件处理方法总结