Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Григорий от Апрель 04, 2012, 09:57



Название: QPushButton и Изображение
Отправлено: Григорий от Апрель 04, 2012, 09:57
Уважаемые форумчане, как сделать чтобы кнопка созданная вот таким образом

Код:
btn = new QPushButton(QIcon(":shut.png"),"")

т.е с пустым текстом и неким изображением, могла при растяжении по вертикали и горизонтали тянуть и это изображении без нарушения пропорций (т.е изображение было всегда максимальным внутри рамки кнопки но при этом и сохраняло свои пропорции)

дайте мне направление советом в нужную сторону, что там надо добавить стиль может какой?


Название: Re: QPushButton и Изображение
Отправлено: GreatSnake от Апрель 04, 2012, 10:12
Опять ты с этим растягиванием)
Стандартных средств нет.
Можно попробовать перегрузить QPushButton::resizeEvent() и в нём выставить соответствующий размер через setIconSize().
Но нет гарантий, что это будет портабельно, т.к. кнопка очень platform-specific контрол.


Название: Re: QPushButton и Изображение
Отправлено: Григорий от Апрель 04, 2012, 11:07
Опять ты с этим растягиванием)
Стандартных средств нет.
Можно попробовать перегрузить QPushButton::resizeEvent() и в нём выставить соответствующий размер через setIconSize().
Но нет гарантий, что это будет портабельно, т.к. кнопка очень platform-specific контрол.

хорошо делаю свой класс с перегруженым событием

Код:
class Button : public QPushButton {
 public:
  Button(QIcon icon,QString str) : QPushButton(icon,str) {}
 protected:
  virtual void resizeEvent(QResizeEvent* event) {
//   setIconSize(event->size());
  }
};

а вот что в самом евенте писать ?, если ставить что я закоментил то у меня получается цикл изменение размера иконы порождает новый ресайз эвент и кнопка тянется до бесконечности((...


Название: Re: QPushButton и Изображение
Отправлено: GreatSnake от Апрель 04, 2012, 11:48
Не ну так же нельзя...
Ведь кнопка состоит помимо иконки как минимум ещё и из рамки и отступов.
Выставляя размер иконки в текущий размер кнопки размер кнопки будет пересчитан и получится рекурсия.
Поэтому размер иконки нужно рассчитывать с учётом рамки и отступов:
Код
C++ (Qt)
void resizeEvent(QResizeEvent* event)
{
QStyleOptionButton opt;
initStyleOption( &opt );
 
int bm = style()->pixelMetric( QStyle::PM_ButtonMargin, &opt, this );
int fw = style()->pixelMetric( QStyle::PM_DefaultFrameWidth, &opt, this ) * 2;
 
setIconSize( QSize( width() - ( bm + fw ), height()  - ( bm + fw ) ) );
}
 
Ежели всё-равно будет рекурсия, то придётся вставить так называемые guard-ы.


Название: Re: QPushButton и Изображение
Отправлено: andrew.k от Апрель 05, 2012, 00:22
Ежели всё-равно будет рекурсия, то придётся вставить так называемые guard-ы.
А кто такие? Расскажешь?


Название: Re: QPushButton и Изображение
Отправлено: Bepec от Апрель 05, 2012, 07:03
Я думаю что это аналог булевских переменных, просто более красиво оформленных.

Проще выражаясь - запрет на перерасчёт размеров в момент изменения размеров картинки.


Название: Re: QPushButton и Изображение
Отправлено: andrew.k от Апрель 05, 2012, 10:51
Я думаю что это аналог булевских переменных, просто более красиво оформленных.

Проще выражаясь - запрет на перерасчёт размеров в момент изменения размеров картинки.
Гадать я тоже могу. Я спросил, чтобы знать достоверно.


Название: Re: QPushButton и Изображение
Отправлено: GreatSnake от Апрель 05, 2012, 11:41
А кто такие? Расскажешь?

Проще выражаясь - запрет на перерасчёт размеров в момент изменения размеров картинки.
Именно так)

Код
C++ (Qt)
void resizeEvent(QResizeEvent* event)
{
if( in_resize )
         return;
in_resize = true;
...
in_resize = false;
}
 


Название: Re: QPushButton и Изображение
Отправлено: Bepec от Апрель 05, 2012, 12:01
Профит ;)


Название: Re: QPushButton и Изображение
Отправлено: andrew.k от Апрель 05, 2012, 12:12
А кто такие? Расскажешь?

Проще выражаясь - запрет на перерасчёт размеров в момент изменения размеров картинки.
Именно так)

Код
C++ (Qt)
void resizeEvent(QResizeEvent* event)
{
if( in_resize )
         return;
in_resize = true;
...
in_resize = false;
}
 
PFF тогда не интересно)


Название: Re: QPushButton и Изображение
Отправлено: GreatSnake от Апрель 05, 2012, 12:14
PFF тогда не интересно)
Ну вот, знал бы, не писал бы)


Название: Re: QPushButton и Изображение
Отправлено: Bepec от Апрель 05, 2012, 12:24
А все гварды на этом стоят ;) Пусть и не интересно, зато функционально ;)


Название: Re: QPushButton и Изображение
Отправлено: andrew.k от Апрель 05, 2012, 13:06
PFF тогда не интересно)
Ну вот, знал бы, не писал бы)
Не написал бы, я бы не узнал бы)