具有透明背景的 QDialog 显示为黑色

Posted

技术标签:

【中文标题】具有透明背景的 QDialog 显示为黑色【英文标题】:QDialog with transparent background shows up as black 【发布时间】:2020-05-11 01:25:56 【问题描述】:

我有QDialog,它是模态的,占据整个屏幕,这意味着它跨越所有显示器,我想让它透明。最初我went setWindowOpacity() 并且它起作用了,但在那之后,我使用QPainter 在对话框上绘制的所有其他内容都会不透明地绘制,这是可以理解的。因为这不是我正在寻找的解决方案,所以我最终做了setAttribute(Qt::WA_TranslucentBackground),令我惊讶的是,背景最终变成了黑色。当我做setStyleSheet("QDialog background-color: transparent;") 时也会发生同样的事情。有其他人看到这个问题吗?我该如何解决?

一些代码sn-ps:

SnipAreaDialog::SnipAreaDialog(QWidget *parent) : QDialog(parent) 
  setAttribute(Qt::WA_TranslucentBackground);
  setCursor(Qt::CrossCursor);


void SnipAreaDialog::showEvent(QShowEvent *event) 
  auto desktopRect = qApp->desktop()->geometry();
  setGeometry(desktopRect);
  QDialog::showEvent(event);

另外,我正在显示带有 QDialog::exec() 的对话框,我尝试将其父级设置为 0,以及我的应用程序的主窗口,这是相同的行为。

【问题讨论】:

【参考方案1】:

是的,我也遇到过这种情况,试试这样,对我有帮助... 下面的例子

#include <QApplication>
#include <QDialog>

class Dialog : public QDialog

public:
    Dialog() : QDialog(0, Qt::FramelessWindowHint) 
    
        setAttribute(Qt::WA_TranslucentBackground);
    
;

int main(int argc, char *argv[])

    QApplication a(argc, argv);
    Dialog d;
    d.showFullScreen();
    return a.exec();

如果没有父母,您可以考虑使用 Qt::WindowStaysOnTopHint 也是如此。如果窗口系统支持它,一个 工具窗口可以用较轻的框架装饰。它可以 也可以和Qt::FramelessWindowHint结合。

【讨论】:

以上是关于具有透明背景的 QDialog 显示为黑色的主要内容,如果未能解决你的问题,请参考以下文章

具有透明背景的 iOS 应用程序图标在设备上显示黑色背景

将具有透明背景的图像上传到 azure blob 显示具有黑色背景的图像

具有透明背景的 UITableView 具有纯黑色边框

在 IrfanView 中设置透明图像背景

Popup具有黑色背景,即使它已设置为清除

怎么通过代码把图片的黑色背景变成透明的?