Qt пользовательский фон виджета прозрачен, но я хочу, чтобы мы могли использовать объекты, которые находятся за виджетом - PullRequest
1 голос
/ 08 октября 2019

Я создал CustomWidget класс:
CustomWidget.h :

#include <QWidget>
#include <QPainter>

class CustomWidget : public QWidget
{
  Q_OBJECT
public:
  explicit CustomWidget(QWidget *parent = nullptr);

  void paintEvent(QPaintEvent* event);

signals:

public slots:
};

CustomWidget.cpp :

#include "customwidget.h"

CustomWidget::CustomWidget(QWidget *parent) : QWidget(parent)
{
  this->setWindowFlag(Qt::FramelessWindowHint);
}

void CustomWidget::paintEvent(QPaintEvent* event)
{
  if (this->isActiveWindow())
  {
    QPainter painter(this);
    painter.setPen(Qt::green);
    painter.setBrush(QBrush(QColor(69, 232, 32, 100)));
    painter.drawRect(rect());
  }
}

Когда я компилирую и запускаю этот код в Linux (KDE Neon), я вижу правильный виджет с цветом (цвет зеленый = 69, 232, 32), но прозрачность (альфа = 100) не работает. Вот изображение:
This is not correct widget background.
Как я могу создавать прозрачные или непрозрачные виджеты? Это ошибка?
Кроме того, я могу видеть прозрачные виджеты, если я могу создать прозрачность / прозрачный виджет, но не могу использовать фон (я имею в виду, я не могу вмешиваться в объекты, которые находятся за виджетом. весь экран и мы можем использовать экран). Могу ли я создать такие виджеты? Благодаря.

1 Ответ

1 голос
/ 08 октября 2019

Ну, я думаю, что вы забыли поставить следующую строку. Ниже:

this->setWindowFlag(Qt::FramelessWindowHint);

Поместите следующую строку (т. Е. В конструктор вашего CustomWidget):

this->setAttribute(Qt::WA_TranslucentBackground);

Тогда у вас должен быть желаемый прозрачный фон на основе непрозрачности, которую выустановлен. Надеюсь, это поможет в решении вашей проблемы.

...