用Qt显示半透明/不规则窗口

是否可以用Qt显示半透明和/或不规则形状的窗户?

(我假设它最终取决于底层GUI系统的function,但我们至less假定Windows XP / Mac OS X)

如果是这样,一个人怎么做到这一点?

Solutions Collecting From Web of "用Qt显示半透明/不规则窗口"

对的,这是可能的。 关键是QWidgetQt::WA_TranslucentBackground属性

这是一个简单的类,绘制一个半透明的红色窗口背景50%阿尔法。

TranslucentRoundWindow.h:

 #include <QWidget> class TranslucentRoundWindow : public QWidget { public: TranslucentRoundWindow(QWidget *parent = 0); virtual QSize sizeHint() const; protected: virtual void paintEvent(QPaintEvent *paintEvent); }; 

TranslucentRoundWindow.cpp:

 #include <QtGui> #include "TranslucentRoundWindow.h" TranslucentRoundWindow::TranslucentRoundWindow(QWidget *parent) : QWidget(parent, Qt::FramelessWindowHint) { setAttribute(Qt::WA_TranslucentBackground); } QSize TranslucentRoundWindow::sizeHint() const { return QSize(300, 300); } void TranslucentRoundWindow::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); painter.setBrush(QColor(255, 0, 0, 127)); painter.drawEllipse(0, 0, width(), height()); } 

如果你想能够用鼠标移动这个窗口,你将不得不重写mousePressEventmouseMoveEventmouseReleaseEvent

这当然是可能的。 Qt附带“形状时钟”演示。 其中的文件在这里 。

它创建一个奇形状的顶级窗口。 应该是所有你需要的。