我一直在拔我的头发试图弄清楚如何做到这一点。我已经尝试过使用样式表,但无济于事。 #qt上有人说他们有这样的东西可以工作,但是当我调整我的代码时,我只能让某些小部件变得透明,但遗憾的是不是QProgressbar
#include <QApplication>
#include <QProgressBar>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *widget = new QWidget();
QProgressBar *progress = new QProgressBar(widget);
QPalette palette(widget->palette());
palette.setColor(widget->backgroundRole(), Qt::green);
widget->setAutoFillBackground(true);
widget->setPalette(palette);
QPalette palette1(progress->palette());
palette1.setColor(progress->backgroundRole(), Qt::transparent);
progress->setAutoFillBackground(true);
progress->setPalette(palette1);
widget->show();
return a.exec();
}
万一你想知道我为什么要这样做;我试图让这个叠加图像是一副卡片,当你抓住时,它会缩小。我希望透明地覆盖图标以节省空间。
有什么想法吗?
答案 0 :(得分:3)
我不知道你是否有一些特殊的理由不使用样式表,或者如果你不能使用样式表,但是这里是使用样式表解决透明度问题的方法:
progress->setStyleSheet("QProgressBar{"
"border: 1px solid transparent;"
"text-align: center;"
"color:rgba(0,0,0,100);"
"border-radius: 5px;"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(182, 182, 182, 100), stop:1 rgba(209, 209, 209, 100));"
"}"
"QProgressBar::chunk{"
"background-color: rgba(0,255,0,100);"
"}");
您可以根据自己的喜好进行调整。
答案 1 :(得分:1)
您可以使用setWindowOpacity设置窗口透明度,但它仅适用于顶级窗口。因此,如果您更改这样的代码,它应该可以工作。
#include <QApplication>
#include <QProgressBar>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *widget = new QWidget();
QProgressBar *progress = new QProgressBar();
QPalette palette(widget->palette());
palette.setColor(widget->backgroundRole(), Qt::green);
widget->setAutoFillBackground(true);
widget->setPalette(palette);
progress->setWindowOpacity(0.5);
widget->show();
progress->show();
return a.exec();
}
我现在没有qt开发环境,所以我无法尝试,但如果有什么不能按预期工作,我很乐意尝试提供更多帮助。