我有一个自定义小部件来模拟气球提示。为了正确显示,该部件取决于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。 –