用Qt显示半透明/不规则形状的窗户

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

(我假设它最终取决于底层GUI系统的功能,但让我们假设至少Windows XP / Mac OS X)

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

是的,这是可能的.关键是QWidget的Qt :: WA_TranslucentBackground属性

这是一个简单的类,绘制一个圆形半透明窗口,红色背景50%alpha.

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,127));

    painter.drawEllipse(0,width(),height());
}

如果您想要使用鼠标移动此窗口,则必须覆盖mousepressEvent,mouseMoveEvent和mouseReleaseEvent.

相关文章

Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...
Windows文件操作基础代码 Windows下对文件进行操作使用的一段...
Winpcap基础代码 使用Winpcap进行网络数据的截获和发送都需要...
使用vbs脚本进行批量编码转换 最近需要使用SourceInsight查看...