如何让无边框透明窗口保持在最前面

moiit 2011-10-13 06:09:24
就是怎么做到:frameless && translucent && stay-on-top ==true

似乎在X11上可以做到,参见最下面的程序代码。
另外,我已经试验过,采用win7的API,也能做到这点。
请教如果要在winXP和macOS上实现,该如何做?

用这个的话,可以无边框透明,但不能在最前。
setAttribute(Qt::WA_TranslucentBackground,true);
setWindowFlags(Qt::WindowStaysOnTopHint);
setWindowFlags(Qt::FramelessWindowHint);


用这个的话,能在最前,又不能透明,背景是黑的。
setAttribute(Qt::WA_TranslucentBackground,true);
setWindowFlags(Qt::FramelessWindowHint);
setWindowFlags(Qt::WindowStaysOnTopHint);


现在的问题是,有什么办法可以在不使用Qt::FramelessWindowHint的情况下,做到透明
以下的代码也不行,背景仍然是黑的。

#include <QtGui>

class Widget : public QWidget {
public:
Widget() : QWidget() {
setWindowFlags(windowFlags()|Qt::WindowStaysOnTopHint);
setAttribute(Qt::WA_TranslucentBackground,true);
//QPalette pal = palette();
//pal.setColor(QPalette::Background, QColor (0, 0 , 0, 20));
//setPalette(pal);
}
protected:
void paintEvent(QPaintEvent *pe) {
QPainter p(this);
p.setBrush(Qt::red);
p.setRenderHint(QPainter::Antialiasing);
p.drawEllipse(rect().adjusted(50,50,-50,-50));
}
void resizeEvent(QResizeEvent *re) {
setMask(rect());
}
};

int main(int argc, char **argv) {
QApplication app(argc, argv);
Widget w;
w.show();
return app.exec();
}
...全文
205 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
岁小草 2012-05-03
  • 打赏
  • 举报
回复
我只是用setWindowFlags(Qt::WindowStaysOnTopHint);就可以实现显示在最前面,背景也不是黑的啊,你说的透明是什么效果?

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧