Мне нужно установить QFrame
с фоновым изображением: http://imgur.com/RnSghvV. Это то, что я пробовал:Qt - визуализировать QFrame с изображением в качестве фона без использования WA_TranslucentBackground
setAutoFillBackground(true);
setWindowFlags(Qt::FramelessWindowHint);
setStyleSheet("background: transparent;");
QPalette p = this->palette();
p.setBrush(QPalette::Base, QPixmap("ipad.png"));
this->setPalette(p);
Это то, что я получаю:
Как вы можете видеть, есть досадная черная рамка по краям, которые я хочу, чтобы удалить, и просматривать только изображение. Как мне это сделать?
P.S, можно заставить его работать, используя свойство Qt:: WA_TranslucentBackground
, как видно here. Однако в моем случае QFrame будет содержать другие подвижки, некоторые из которых являются QImages, отображаемыми через OpenGL, а установка Qt:: WA_TranslucentBackground
делает эти изображения невидимыми для Windows. Поэтому я ищу решение, которое не использует это свойство.
Edit:
на основе решения, предложенного Евгений, я попробовал это (я использовал 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")
, серый фон станет черным.
Возможно setStyleSheet («background-color: transparent;»); это исправит. – AlexanderVX
'background' работает так же, как' background-color'. Я пробовал оба, не работает. – SexyBeast
Может быть, 'setStyleSheet (" border-image: ipad.png ");' без касания палитры виджета будет работать? – dvvrd