Как я могу динамически изменить фоновое изображение QPushButton в Qt?

У меня есть 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, и это изменение происходит мгновенно. Есть мнения?


person Lucian Apostol    schedule 11.11.2013    source источник


Ответы (1)


Вы должны иметь возможность изменить фон с помощью таблиц стилей:

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. или путь к вашим ресурсам правильный..

person andrea.marangoni    schedule 11.11.2013