Отображение полупрозрачных/нерегулярных окон с Qt Можно ли отображать полупрозрачные и/или нерегулярные окна с Qt? (я предполагаю, что это в конечном счете зависит от возможностей базовой GUI-системы, но пусть предполагается как минимум Windows XP/Mac OS X) Если да, то как это сделать? Ответ 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". Документация которого здесь. Создает окно верхнего уровня с нечетной формой. Должно быть все, что вам нужно.
Ответ 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". Документация которого здесь. Создает окно верхнего уровня с нечетной формой. Должно быть все, что вам нужно.