Можно ли отображать полупрозрачные и/или нерегулярные окна с Qt?
(я предполагаю, что это в конечном счете зависит от возможностей базовой GUI-системы, но пусть предполагается как минимум Windows XP/Mac OS X)
Если да, то как это сделать?
Можно ли отображать полупрозрачные и/или нерегулярные окна с Qt?
(я предполагаю, что это в конечном счете зависит от возможностей базовой GUI-системы, но пусть предполагается как минимум Windows XP/Mac OS X)
Если да, то как это сделать?
Да, это возможно. Ключ - это атрибут Qt::WA_TranslucentBackground
QWidget
Вот простой класс, который рисует круглое полупрозрачное окно с красным фоном 50% альфа.
#include <QWidget>
class TranslucentRoundWindow : public QWidget
{
public:
TranslucentRoundWindow(QWidget *parent = 0);
virtual QSize sizeHint() const;
protected:
virtual void paintEvent(QPaintEvent *paintEvent);
};
#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
.
Это, безусловно, возможно. Qt поставляется с демонстрацией "Shaped Clock". Документация которого здесь.
Создает окно верхнего уровня с нечетной формой. Должно быть все, что вам нужно.