2013-09-19 4 views
2

Я хочу использовать png-изображение с прозрачностью и настраиваемой рамкой в ​​фоне основного фона Qt.Qt mainwindow transparent background

http://www.shiaupload.ir/images/77810787432153420049.png

есть ли хорошая идея?

+1

[QWidget :: setMask (const QBitmap & bitmap)] (http://qt-project.org/doc/qt-5.0/qtwidgets/qwidget.html#setMask) и [QPixmap :: mask()] (http : //qt-project.org/doc/qt-5.0/qtgui/qpixmap.html#mask) может быть то, что вы ищете. – thuga

+2

Вы также можете сделать что-то вроде 'this-> setWindowFlags (Qt :: FramelessWindowHint);' 'this-> setAttribute (Qt :: WA_TranslucentBackground);' и затем нарисовать свой фон. – thuga

+0

@thuga - ваше последнее сообщение - ответ. Я хочу добавить, что если используется Qt4 - есть ошибка с минимизацией и восстановлением окна: https://bugreports.qt-project.org/browse/QTBUG-17548 –

ответ

3

Вы можете сделать что-то вроде этого:

this->setWindowFlags(Qt::FramelessWindowHint); 
this->setAttribute(Qt::WA_TranslucentBackground); 

Затем окрасить фон окна в paint event.

Примечание: Как указал Дмитрий, в Qt4 есть bug with minimizing and restoring the window.

Другой вариант - использовать QWidget::setMask(const QBitmap & bitmap), но это может быть медленным, если регион является сложным.

+0

Привет, можете ли вы указать, как достичь прозрачности через настройка маски? – SexyBeast

+0

@Cupidvogel Недостаточен ли пример в документации? – thuga

+0

Нет, он не работает. Я попытался применить это здесь: http://stackoverflow.com/questions/34372291/qt-render-qframe-with-image-as-background-without-using-wa-translucentbackgrou, я не мог заставить его работать. – SexyBeast