日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

qt系统托盘显示、无主窗体

發布時間:2025/6/15 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt系统托盘显示、无主窗体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

系統圖盤是應用程序經常用到的一個控件,當應用程序需要長時間存在的時候,這個控件會變得非常有用,比如,窗口隱藏,顯示,關于、關閉等接口都可以放在圖盤中處理,今天與到一個問題,需求是這樣的:只需要顯示圖盤,不需要主窗口,提示信息需要動態的改變

? ? 看似很簡單的一個問題,我自己試了試之后,也倒騰了好一會兒,先看我的第一版程序,代碼如下

1 QSystemTrayIcon *tc = new QSystemTrayIcon; 2 3 tc->setToolTip(QStringLiteral("消息提示")); 4 5 tc->setIcon(style()->standardIcon(QStyle::SP_TitleBarNormalButton)); 6 7 tc->show(); 8 9 QMenu * menu = new QMenu; 10 11 QAction * aboutAct = menu->addAction(QStringLiteral("關于")); 12 13 connect(aboutAct, &QAction::triggered, this, []{ 14 15 QWindow * w = new QWindow; 16 17 w->show(); 18 19 }); 20 21 tc->setContextMenu(menu); View Code

? ? 這些代碼是為主程序設置了圖盤,然后main函數中只需要new一個窗口,圖盤就自然顯示了,因為圖盤自己show了。

? ? 不過這樣是有問題的,當操作右鍵菜單事件(關于)后,關閉彈出的菜單?,圖盤也會隨之消息,主程序結束,個人人為是主程序的消息循環退出了導致圖盤退出的,然后想辦法,試了以下幾種方式;

1、main函數中顯示窗口,并設置窗口無任務欄圖標和最小化:?圖盤還是會消失

2、main函數顯示, 不做任何窗口設置:不消失

? ? 方法2的目的其實就是不讓主線程的消息循環退出?,那我們就朝著這個方向前進,把主窗體背景色設置透明,問題就迎刃而解了,經過測試,果然可以,代碼如下:

w->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint );

w->setAttribute(Qt::WA_TranslucentBackground);

注意:窗口如果為QMainWindow,需要手動去掉工具欄和狀態欄?

? ? 其實還有一種辦法,不過個人不建議使用,那就是在消息循環結束后立刻重啟一個消息循環,總之就是主線程不退出,代碼如下:

int ret = 0;

while (true)

{

ret = a.exec();

}

return a.exec();

? ? ?最后更改氣泡提示的方法比較簡單,代碼如下:

1 QTimer * timer = new QTimer(this); 2 3 connect(timer, &QTimer::timeout, this, [tc]{ 4 5 static size_t i = 0; 6 7 tc->showMessage(QStringLiteral("我是標題%1").arg(i++) 8 9 , QStringLiteral("我是內容...") 10 11 , QSystemTrayIcon::Information, 1000); 12 13 }); 14 15 timer->start(1000); View Code

? ? 我是使用了一個定時器,每隔1秒彈出一個提示,大家也可以根據自己的需求來在合適的時機彈出提示?

轉載于:https://www.cnblogs.com/swarmbees/p/5621489.html

總結

以上是生活随笔為你收集整理的qt系统托盘显示、无主窗体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。