国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Qt中的置頂窗口

2019-11-09 18:31:20
字體:
來源:轉載
供稿:網友

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();}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 承德市| 沾化县| 乃东县| 孝昌县| 利津县| 临清市| 鲁山县| 西华县| 乐昌市| 察雅县| 保康县| 潮州市| 开江县| 青河县| 封开县| 海淀区| 金华市| 东方市| 德阳市| 古浪县| 江源县| 乌兰察布市| 易门县| 彭州市| 富顺县| 封开县| 樟树市| 丹寨县| 合山市| 张家港市| 进贤县| 阜平县| 赤水市| 襄城县| 象州县| 喀喇沁旗| 鄂托克旗| 麻城市| 天镇县| 宜昌市| 磐安县|