Russian Qt Forum

Qt => Вопросы новичков => Тема начата: kolts от Октябрь 19, 2015, 00:38



Название: Автоматическое изменение размера иконки кнопки
Отправлено: kolts от Октябрь 19, 2015, 00:38
Есть несколько кнопок на форме. Кнопки могут менять размер. Как сделать так, чтоб автоматически менялись иконки при изменении размера кнопок.
Пока сделал через eventFilter
bool eventFilter(QObject *o, QEvent *e)
{
   if(e->type() == QEvent::Resize)
    {
        QPushButton *button = qobject_cast<QPushButton*>(o);
        if(button)
        {
            button->setIconSize(QSize(
                  button->icon().actualSize(button->size()).width() - 10,
                  button->icon().actualSize(button->size()).height() - 10));
        }
        else return false;
    }
    return false;
}
-10 потому что кнопка расширяется больше чем надо.
За временное решение сойдет, но может есть более умный и легкий способ?


Название: Re: Автоматическое изменение размера иконки кнопки
Отправлено: gil9red от Октябрь 19, 2015, 01:23
Переопределить QPushButton и в него засунуть корректировку размера иконок.
Через eventFilter, по мне, проще будет :)


Название: Re: Автоматическое изменение размера иконк
Отправлено: kolts от Октябрь 19, 2015, 01:41
Цитировать
Через eventFilter, по мне, проще будет
Мой способ?Мутный он какой то, у меня есть кнопка которая скрывает и показывает виджет на форме, за счет этого эти самые кнопки с иконками изменяются в размере, так всю форму аж передергивает. Потому что от размера иконки зависит размер кнопки. Но как временное решение сойдет


Название: Re: Автоматическое изменение размера иконки кнопки
Отправлено: Racheengel от Октябрь 19, 2015, 02:33
Переопределить QPushButton и в него засунуть корректировку размера иконок.

+1


Название: Re: Автоматическое изменение размера иконки кнопки
Отправлено: kolts от Октябрь 19, 2015, 10:45
void PushButton::resizeEvent(QResizeEvent *e)
{
    setIconSize(icon().actualSize(QSize(
                                  e->size().width() - 10,
                                  e->size().height() - 10)));
    QPushButton::resizeEvent(e);

}
Переопределил класс QPushButton, переопределил resizeEvent. Оставлю так но поведение примерно такое же.