Is it possible to display translucent and/or irregular-shaped windows with Qt?
(I\'m assuming it ultimately depends on the capabilities of the underlying GUI system,
It certainly is possible. Qt ships with the "Shaped Clock" demonstration. The documentation of which is here.
It creates a top-level window with an odd shape. Should be all you need.
Yes, it is possible. The key is the Qt::WA_TranslucentBackground
attribute of QWidget
Here is a simple class that draws a round translucent window with a red background 50% alpha.
#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());
}
If you want to be able to move this window with the mouse, you will have to override mousePressEvent
, mouseMoveEvent
and mouseReleaseEvent
.