我有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,以及将其设置为应用程序的主窗口,这是相同的行为。
[是的,我也遇到了这种情况,尝试这样,它对我有帮助...下面的示例
#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
结合使用。