Мне нужно установить QFrame
с фоновым изображением: https://imgur.com/RnSghvV. Вот что я пробовал:
setAutoFillBackground(true);
setWindowFlags(Qt::FramelessWindowHint);
setStyleSheet("background: transparent;");
QPalette p = this->palette();
p.setBrush(QPalette::Base, QPixmap("ipad.png"));
this->setPalette(p);
Вот что я получаю:
Как видите, по краям есть надоедливая черная рамка, которую я хочу убрать, и просматривать только изображение. Как я могу это сделать?
PS, его можно заставить работать, используя свойство Qt:: WA_TranslucentBackground
, как показано здесь. Однако в моем случае QFrame будет содержать другие подвиджеты, некоторые из которых представляют собой QImages, отображаемые через OpenGL, и установка Qt:: WA_TranslucentBackground
делает эти изображения невидимыми в Windows. Поэтому я ищу решение, которое не использует это свойство.
Редактировать:
На основе решения, предложенного Евгением, я попробовал это (я использовал 325 на 400 в качестве размеров для виджета, потому что это размеры изображения):
#include <QApplication>
#include <QLabel>
#include <QBitmap>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel l;
l.setWindowFlags(Qt::FramelessWindowHint);
QPixmap p(":/img/ipad.png");
l.setPixmap(p);
l.setScaledContents(true);
l.resize(300, 500); //just to test my idea
l.setMask(p.scaled(l.width(),l.height(),Qt::IgnoreAspectRatio,
Qt::SmoothTransformation).mask());
l.show();
return a.exec();
}
При этом выглядит так:
Справа и снизу по-прежнему отображается серый фон. Если я добавлю setStyleSheet("background: transparent")
, серый фон станет черным.
background
работает так же, какbackground-color
. Пробовал оба, не работает. - person SexyBeast   schedule 19.12.2015setStyleSheet("border-image: ipad.png");
не трогая палитру виджета будет работать? - person dvvrd   schedule 19.12.2015QWidget::setMask
? - person Evgeny   schedule 05.01.2016