1

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

以防万一您想知道我为什么要这样做;我试图让这个叠加层成为一副纸牌的图标,当你抓住它时,它会缩小。我希望它透明地覆盖在图标上以节省空间。

有任何想法吗?

4

2 回答 2

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);"
                           "}");

您可以根据自己的喜好进行调整。

于 2013-09-04T12:14:32.590 回答
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 开发环境,所以我无法尝试,但如果有什么不按您的预期工作,我很乐意尝试提供更多帮助。

于 2013-09-04T11:23:44.950 回答