Qt Balloon Window от QFrame

Я хотел бы создать свое собственное окно Balloon для подсказок в Qt. Я начинаю с создания окна с закругленными углами.

Я использую класс, унаследованный от QFrame. Конструктор класса содержит:

this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
Pal.setColor(QPalette::Background, Qt::yellow);
this->setAutoFillBackground(true);
this->setPalette(Pal);
this->setStyleSheet("QFrame {border-style: solid; border-width: 10px;"
                    "border-radius: 100px;"
                    "min-width: 10em; background-clip: padding; background-origin: content;}");

Но это не создает закругления углов при показе с использованием show() функция-член. Я получаю это:

Как я могу избавиться от этих прямоугольных краев и сделать их прозрачными?

Если вам нужна дополнительная информация, пожалуйста, спросите.

1 ответ

Решение

Если мое предположение верно, вы ищете что-то вроде setMask!

По сути, вам нужно нарисовать прямоугольник с желаемым радиусом, а затем преобразовать его в QRegion, чтобы использовать его с setMask. Смотрите ниже один из способов:

QPainterPath path;
path.addRoundedRect(rect(), 100, 100);
QRegion region = QRegion(path.toFillPolygon().toPolygon());
setMask(region);

И это будет результат:

Надеюсь, это поможет!

auto frame = new QWidget(parent, Qt::Popup); 
frame->setStyleSheet("background-color: red; border: 1px solid green; border-radius: 6px;");

QPainterPath path; 
path.addRoundedRect(frame->rect(), 6, 6); 
frame->setMask(path.toFillPolygon().toPolygon());

frame->show();
Другие вопросы по тегам