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

问题描述 投票:0回答:1

我有QDialog,它是模态的,并占据整个屏幕,这意味着它跨所有监视器而已,我想使其透明。最初我使用went setWindowOpacity()并成功,但是之后我将使用QPainter在对话框上进行其他绘制,所以它会不透明地绘制,这是可以理解的。因为这不是我要寻找的解决方案,所以我最终做了setAttribute(Qt::WA_TranslucentBackground),令我惊讶的是,背景最终变成了黑色。当我执行setStyleSheet("QDialog {background-color: transparent;}")时,也会发生同样的事情。还有其他人看到此问题了,我该如何解决?

一些代码段:

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,以及将其设置为应用程序的主窗口,这是相同的行为。

c++ qt qt5 transparency qdialog
1个回答
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结合使用。

© www.soinside.com 2019 - 2024. All rights reserved.