QT5.15.2 + rk3588(linux)使用QDialog使用样式表设置背景图片后,当QDialog不是顶层窗口时,QDialog背景透明部分变成黑色,windows下没有问题
相关代码如下:
#include "dialog.h"
#include "ui_dialog.h"
#include <QStyleOption>
#include <QPainter>
#include <QMessageBox>
Dialog::Dialog(QWidget* parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
setAttribute(Qt::WA_TranslucentBackground);
setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
// 测试方法1无效
// {
// setAutoFillBackground(true);
// QPalette pal = palette();
// pal.setColor(QPalette::Window, Qt::transparent);
// setPalette(pal);
// setWindowOpacity(1);
// setAttribute(Qt::WA_TranslucentBackground);
// }
// //测试方法2无效
// {
// setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
// setAttribute(Qt::WA_TranslucentBackground);
// }
// 测试方法3无效
// {
// pPixmap.load(":/Resources/matrixConfigTool/bg.png");
// }
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::paintEvent(QPaintEvent* event)
{
// (void)event;
// QStyleOption opt;
// opt.init(this);
// QPainter p(this);
// style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
// 测试方法3无效
{
QPainter p(this);
p.drawPixmap(0, 0, width(), height(), pPixmap);
}
}
void Dialog::on_pushButton_clicked()
{
QMessageBox::information(NULL, "cesi", "TopDialog");
}
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
void paintEvent(QPaintEvent* event);
private slots:
void on_pushButton_clicked();
private:
Ui::Dialog *ui;
QPixmap pPixmap;
};
#endif // DIALOG_H
运行后现象图片
请各位指点
不知道你这个问题是否已经解决, 如果还没有解决的话: QPalette palette;
palette.setColor(QPalette::Background,QColor("red"));
//palette.setBrush(QPalette::Background,QBrush(QPixmap("://SplashScreen.png").scaled(this->size())));
dlg->setPalette(palette);
填充照片时,记得缩放
QPixmap("://SplashScreen.png").scaled(this->size())