QProgressBar为半透明叠加层

时间:2013-09-04 11:08:23

标签: qt

我一直在拔我的头发试图弄清楚如何做到这一点。我已经尝试过使用样式表,但无济于事。 #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();
}

万一你想知道我为什么要这样做;我试图让这个叠加图像是一副卡片,当你抓住时,它会缩小。我希望透明地覆盖图标以节省空间。

有什么想法吗?

2 个答案:

答案 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开发环境,所以我无法尝试,但如果有什么不能按预期工作,我很乐意尝试提供更多帮助。