Отображение полупрозрачных / неправильных окон с Qt - PullRequest
12 голосов
/ 26 августа 2009

Можно ли отображать полупрозрачные и / или неправильные окна с помощью Qt?

(я предполагаю, что в конечном итоге это зависит от возможностей базовой системы графического интерфейса, но давайте предположим, по крайней мере, Windows XP / Mac OS X)

Если это так, как это сделать?

Ответы [ 2 ]

11 голосов
/ 26 августа 2009

Да, это возможно. Ключом является Qt::WA_TranslucentBackground атрибут QWidget

Вот простой класс, который рисует круглое полупрозрачное окно с красным фоном 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());
}

Если вы хотите перемещать это окно с помощью мыши, вам придется переопределить mousePressEvent, mouseMoveEvent и mouseReleaseEvent.

3 голосов
/ 26 августа 2009

Это, конечно, возможно. Qt поставляется с демонстрацией «Shaped Clock». Документация по которой здесь .

Создает окно верхнего уровня со странной формой. Должно быть все, что вам нужно.

...