Question

I would like to animate the size of the QPushButton icon, because when i try to animate whole QPushButton object size, icon is not resizing at all. It seems theres no property "setScaledContents" on QPushButton icon. I tried to use this code for icon in my custom QPushButton method (on hover):

QIcon *icon = new QIcon(this->icon());
QPropertyAnimation *animation = new QPropertyAnimation((QObject*)icon, "size");
animation->setDuration(1000);
QSize test = this->size();
animation->setStartValue(test);

animation->setEndValue(QSize(test.width()+100,test.height()+100));

animation->start();

But i receive an error "segmentation failed" on this code. Is there any other way i can animate my QPushButton icon?

Was it helpful?

Solution

What you need to do is instead pass in a valid reference to a QObject (per Chris' comment above)

Your code works fine if I simply replace the parameter passed into QPropertyAnimation:

// ui->pushButton is a QPushButton*
QPropertyAnimation *animation = new QPropertyAnimation(ui->pushButton, "size");
animation->setDuration(1000);
QSize test = this->size();
animation->setStartValue(test);
animation->setEndValue(QSize(test.width()+100,test.height()+100));
animation->start();

I'm going to assume that you're subclass-ing QPushButton (explains this->icon())... perhaps you can try to access it directly instead? Though I'm going to guess that it's privately owned by the base/parent class.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top