Qt Dialog添加背景图片后,当QDialog不是顶层窗口时透明部分背景是黑色

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

运行后现象图片

img

请各位指点

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^