具有透明背景的 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 显示为黑色的主要内容,如果未能解决你的问题,请参考以下文章