Подтвердить что ты не робот

Отображение полупрозрачных/нерегулярных окон с Qt

Можно ли отображать полупрозрачные и/или нерегулярные окна с Qt?

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

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

4b9b3361

Ответ 1

Да, это возможно. Ключ - это атрибут 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.

Ответ 2

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

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