1

我有一个包含 a 的 QWidget QPushButton,我想更改其中的图像而不重绘整个窗口。

我试过了:

ui->btnIcon->setProperty("highlighted", bIcon);
style()->polish(ui->btnIcon);

在 .qss 文件中:

QPushButton#btnIcon[highlighted=true]{
background-image: url(:/gui/res/Icon1.png);
}

QPushButton#btnIcon[highlighted=false]{
background-image: url(:/gui/res/Icon2.png);
}

它可以工作,但是我必须等待一段时间才能进行更改,并且我还更改了文本,QLabel并且更改会立即发生。有什么意见吗?

4

1 回答 1

0

您应该能够使用样式表更改背景:

ui.yourButton->setStyleSheet("QPushButton{ background-image: url('blabla.jpg')}");

它是即时的。

这是我的代码,它可以完成工作:

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget),
    isOn_(true)
{
    ui->setupUi(this);
    ui->pushButton->setStyleSheet("QPushButton {background-image: url(':blabla1.png')}");
    QObject::connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(changeBack()));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::changeBack(){

    if(isOn_)
    {
        ui->pushButton->setStyleSheet(" QPushButton {background-image: url(':blabla.gif')}");
    } else {
        ui->pushButton->setStyleSheet("QPushButton { background-image: url(':blabla1.png')}");
    }
    isOn_ = !isOn_;
}

检查您的 CSS 的语法是否正确。或者您的资源路径是正确的..

于 2013-11-11T13:54:09.087 回答