Displaying translucent / irregular-shaped windows with Qt

前端 未结 2 1133
野趣味
野趣味 2020-12-16 00:55

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,

相关标签:
2条回答
  • 2020-12-16 01:08

    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.

    0 讨论(0)
  • 2020-12-16 01:21

    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.

    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());
    }
    

    If you want to be able to move this window with the mouse, you will have to override mousePressEvent, mouseMoveEvent and mouseReleaseEvent.

    0 讨论(0)
提交回复
热议问题