我有一個自定義小部件來模擬氣球提示。爲了正確顯示,該部件取決於QWidget屬性Qt::WA_TranslucentBackground
。我的應用程序應該可以在所有主流平臺(Windows XP,Windows 7,Linux,Mac)上運行,所以我擔心一點:所有主流平臺上都有這個屬性嗎?如果不是,我可以查詢它是否是? testAttribute()
不這樣做。它只返回屬性是否已設置,而不是設置是否有效。Qt :: WA_TranslucentBackground隨處可用?
回答
如果配置爲不支持ARGB,這應該與Linux上超過X11的唯一例外一起使用。請參閱QWidget文檔:
創建半透明窗口
由於Qt的4.5,它已經可以創建在支持合成窗口系統半透明 地區的窗口。
爲了能夠在頂級部件此功能,請將其 的Qt :: WA_TranslucentBackground屬性的setAttribute用(),並確保 其背景是在 你想成爲部分透明的區域塗上非不透明的顏色。
平臺說明:
X11:此功能依賴於使用支持ARGB視覺效果和複合窗口管理器的X服務器。
Windows:窗口小部件需要設置Qt :: FramelessWindowHint窗口標誌以使半透明工作。
考慮閱讀標題爲「透明度和雙緩衝」的段落,可能會很有趣。
對於Linux,你應該檢查是否合成啓用:
bool QX11Info::isCompositingManagerRunning() [static]
例如
#ifdef Q_WS_X11
if(QX11Info::isCompositingManagerRunning())
setAttribute(Qt::WA_TranslucentBackground);
#endif
這個問題很舊,但這可能有助於某人。
而對於任何一個在谷歌中徘徊的人,如果你發現自己需要支持非合成桌面,例如四捨五入的OSD或演講氣球彈出窗口,Qt [ShapedClock](https://doc.qt.io/ qt-5/qtwidgets-widgets-shapedclock-example.html)示例演示如何使用'setMask'生成非方形窗口而不進行合成。 – ssokolow
請注意,有時爲了讓'Qt :: WA_TranslucentBackground'在沒有'setMask'的linux下工作,你還必須啓用一些屬性和一個窗口標誌。 https://stackoverflow.com/a/30596357/999943 – phyatt
- 1. Qt FramelessWindowHint和WA_TranslucentBackground字體呈現
- 2. 使用Qt處理XSLT
- 3. Qt應用程序streching隨機時間
- 4. Qt處理keyevents
- 5. 開源Java項目隨處可見
- 6. (MS)WebDav錯誤列表隨處可見?
- 7. 將WA_TranslucentBackground關閉停止窗口重新繪製
- 8. Qt或wxWidgets可可?
- 9. Resharper用戶var哪裏在文件中隨處可見?
- 10. Qt中的setupUi(this)有什麼用處Qt
- 11. 使用Qt並行化OpenCV處理
- 12. Qt:大量的唯一隨機quint64
- 13. CSS的Qt錯誤處理
- 14. Qt中的事件處理
- 15. 在Qt中處理MouseEvents C++
- 16. Qt:如何處理表單?
- 17. Qt和Digia許可
- 18. 剝離尾隨空白處的好處?
- 19. Qt 5項目可以調用Qt 4項目嗎?
- 20. 32位Qt應用程序隨機在Windows 7 x64上崩潰
- 21. 如何定義應用程序中隨處可用的全局常量?
- 22. 處理隨機撲克手
- 23. 隨機矢量處理
- 24. 我可以使用fstream處理諾基亞Qt SDK的文件嗎?
- 25. 檢查Qt Dock中的可用空間
- 26. 使用Qt的程序許可證
- 27. 不可能部署Qt應用程序
- 28. Qt setStyleSheet可以使用哪種字體?
- 29. 可啓動Qt-Linux應用程序
- 30. 是否可以使用cin與Qt?
當代Linux不支持ARGB有多常見或罕見?我可以以某種方式查詢它嗎? –
我不認爲你會遇到與最近的硬件/分佈有關的問題。無論如何,您應該通過使用xdpyinfo或查看配置文件xorg.conf來獲取信息。也許你可能會遇到嵌入式Linux系統的一些問題。這給了更多的東西:http://stackoverflow.com/questions/2434511/what-pixel-format-does-x-server-use。 –