Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: navrocky от Май 20, 2013, 11:07



Название: [РЕШЕНО]Как сделать пропорциональное изменение размера QGraphicsWidget в лайауте
Отправлено: navrocky от Май 20, 2013, 11:07
Пытаюсь сделать сабж с QGraphicsWidget, добавленный в QGraphicsGridLayout.

Сперва установил виджету heightForWidth = true
Код
C++ (Qt)
MyWidget::MyWidget(QGraphicsItem *parent, Qt::WindowFlags wFlags)
   : QGraphicsWidget(parent, wFlags)
{
   QSizePolicy pol(QSizePolicy::Preferred, QSizePolicy::Preferred);
   pol.setHeightForWidth(true);
   setSizePolicy(pol);
}

Затем переписал метод sizeHint
Код
C++ (Qt)
QSizeF MyWidget::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
{
   if (which == Qt::PreferredSize)
   {
       if (constraint.width() >= 0)
       {
           qDebug() << constraint;
           return QSizeF(constraint.width(), constraint.width());
       }
       return QSizeF(100, 100);
   }
   else
       return QGraphicsWidget::sizeHint(which, constraint);
}

Добавил его в QGraphicsGridLayout и виджет тянется во все стороны без каких либо пропоций. Если делаешь sizeHint = Fixed, тогда вообще не тянется, но квадратный.

Гугление мне пока не помогло. Видел статьи по этому поводу, но не видел историй успеха в конце.

Во вложении - минимальный пример.

Если кто разбирался с этой темой, помогите плиз, очень надо :)


Название: Re: Как сделать пропорциональное изменение размера QGraphicsWidget в лайауте?
Отправлено: navrocky от Май 20, 2013, 11:21
Стоило сюда запостить вопрос, сразу пришло озарение  :D

Достаточно указать в sizePolicy по высоте Fixed вместо Preferred:
Код
C++ (Qt)
QSizePolicy pol(QSizePolicy::Preferred, QSizePolicy::Fixed);