LINUX.ORG.RU

Прозрачный QWidget-родитель и непрозрачные объекты-члены


0

1

Есть QWidget, на котором размещен QLabel. Нужно чтобы QLabel был непрозрачным, а QWidget - прозрачным, иначе возникают вот такие некрасивые углы. Как этого добиться? Если я пользуюсь методом setWindowOpacity в родителе, то потомка это тоже затрагивает, что меня не устраивает.

★☆☆☆

Последнее исправление: drull (всего исправлений: 1)
Ответ на: комментарий от shty

> QWidget::setWindowOpacity спасёт отца русской демократии?

Если я пользуюсь методом setWindowOpacity в родителе, то потомка это тоже затрагивает, что меня не устраивает.


Мне нужно чтобы круглый потомок был непрозрачным, а прямоугольные углы родителя - прозрачными.

drull ★☆☆☆
() автор топика
Ответ на: комментарий от drull

> Мне нужно чтобы круглый потомок был непрозрачным, а прямоугольные углы родителя - прозрачными.

А QWidget::setMask()?

rival ★★
()
Ответ на: комментарий от drull

Мне нужно чтобы круглый потомок был непрозрачным,

у меня вопрос, а зачем ты делаешь ты этого потомка делаешь потомком?

shty ★★★★★
()
Ответ на: комментарий от rival

Или даже так:

#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget w;
    w.setAttribute(Qt::WA_TranslucentBackground);
    w.setWindowFlags(w.windowFlags() | Qt::FramelessWindowHint);
    w.setWindowOpacity(0.9);
    w.show();

    QLabel l;
    l.setParent(&w);
    l.setText("test");
    l.resize(300, 40);
    l.setStyleSheet(
        "background: #222;"
        "color: #ddd;"
        "border-width: 1px;"
        "border-style: solid;"
        "border-color: #ccc;"
        "border-radius: 6px;"
    );
    l.show();

    return a.exec();
}
Нашел ответ тут: QT4: Transparent Window with rounded corners

rival ★★
()
Ответ на: комментарий от rival

А QWidget::setMask()?

Спасибо, помогло. Отрендерил QLabel в QPixmap, а потом взял с него маску:

QPixmap pixmap(text->size());
pixmap.fill(Qt::transparent);
text->render(&pixmap,QPoint(),QRegion(), DrawChildren);
this->setMask(pixmap.mask());
drull ★☆☆☆
() автор топика
Ответ на: комментарий от shty

> у меня вопрос, а зачем ты делаешь ты этого потомка делаешь потомком?

Так и другие элементы управления потом могут появиться.

drull ★☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.