Какой самый простой способ написать собственный макет в QT? - PullRequest
1 голос
/ 23 августа 2011

Я столкнулся с проблемой, когда я выполнял анимацию свойств на виджетах, но их позиции анимации, казалось бы, перезаписывались при следующем проходе макета.Казалось бы, виджеты переместились в самом начале анимации, что выглядело плохо.В результате я подумал, что, возможно, если бы я написал свой собственный код макета, я мог бы лучше контролировать вещи.

Какой самый простой способ написать собственный макет в QT?Я попытался выполнить действия, описанные в разделе «Ручная компоновка» документации: http://doc.qt.nokia.com/latest/layout.html#manual-layout Однако, похоже, что происходит сбой при попытке вызвать setGeometry для дочерних виджетов.Кроме того, документы, похоже, конфликтуют с «Ручной компоновкой», в которой говорится, что setGeometry вызывается из resizeEvent, и с документом resizeEvent, говорящим, что этого нельзя делать.Не похоже на слишком много кода.Но мне интересно, каков самый простой / простой способ получить пользовательский макет.

1 Ответ

0 голосов
/ 29 мая 2012

Я думаю, это может сработать.

  1. Начать с виджета Позиционируется полностью вне родительского виджета. не добавить этот виджет в макет.Геометрия A вполне может делить ребро с родителем.

  2. Создать фиктивный виджет D, который пересылает sizeHint () A, но больше ничего не делает.Поместите его в макет.

  3. Анимируйте виджет A к геометрии виджета D.

  4. Поменяйте местами виджеты в макете (удалите виджет D, добавьте виджет A).

Если виджеты A и D созданы вами, то вам следует использовать идиому PIMPL.Если у вашего виджета нет дочерних виджетов, замена виджетов будет тривиальной - поменяйте местами указатели pimpl.Сами виджеты не нужно менять местами.НЕ извлекайте ваш класс PIMPL из QWidgetPrivate, не то чтобы он все равно поддерживается, но я видел код, который это делает.Не очень хорошая идея.

...