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
请各位不吝赐教
不知道你这个问题是否已经解决, 如果还没有解决的话: