QT Linux QDialog一定情况下设置背景透明变成黑色

QT5.15.2 Linux 使用setAttribute(Qt::WA_TranslucentBackground);以及样式表QDialog{border-image: url(:/Resources/matrixConfigTool/bg.png)background-color: transparent;}设置QDialog背景透明以及背景图片,在QDialog A上有一个按钮,在按钮的槽函数中弹出另一个QDialog B(类似QMessagebox的一个提示界面)当点击B QDialog调用exec,点击B Dialog上的按钮,AQDialog原透明部分变成黑色

特别说明:在QDialog A 的按钮槽函数中如果没有setWindowFlags(Qt::FramelessWindowHint); // 内部调用hide();show();这两句代码,当QDialog B弹出时QDialog A 原透明部分就变成黑色的,添加这两句代码后无该问题,原因本人不解
windows 下没有这两个现象

具体代码如下:

#include "dialog.h"
#include "ui_dialog.h"
#include <QStyleOption>
#include <QPainter>
#include <QMessageBox>
#include "dialogmessage.h"
#include "atdlg/atmessagebox.h"


Dialog::Dialog(QWidget* parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    setAttribute(Qt::WA_TranslucentBackground);
    setWindowFlags(Qt::FramelessWindowHint);
    //setAutoFillBackground(true);
}

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);

    QDialog::paintEvent(event);
}


void Dialog::on_pushButton_clicked()
{
    // 如果没有这一下两句,弹出 AtMessageBox  messageBox界面时当前界面透明部分就变成黑色的,原因未找到
    setWindowFlags(Qt::FramelessWindowHint); // 内部调用hide();
    show();
    AtMessageBox messageBox(this);
    messageBox.errorInformation(QString("cesi"), QString("cesiTopDialog"));
    messageBox.exec();
}



#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();

    void on_pushButton_clicked();

private:
    Ui::Dialog *ui;
    QPixmap pPixmap;
};
#endif // DIALOG_H


请各位不吝赐教

参考:

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

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