Описание класса QGraphicsLayoutКласс QGraphicsLayout предоставляет базовый класс для всех компоновщиков в графическом представлении. Далее... #include <QGraphicsLayout> Унаследован от: QGraphicsLayoutItem. От него наследуются: QGraphicsAnchorLayout, QGraphicsGridLayout и QGraphicsLinearLayout. Этот класс был введён в Qt 4.4. Открытые функции
Переопределённые открытые функции
Статические открытые члены
Защищенные функции
Подробное описаниеКласс QGraphicsLayout предоставляет базовый класс для всех компоновщиков в графическом представлении. QGraphicsLayout это абстрактный класс который определяет виртуальный API для упорядочивания потомков QGraphicsWidget и других объектов QGraphicsLayoutItem для QGraphicsWidget. QGraphicsWidget устанавливает ответственность QGraphicsLayout с помощью QGraphicsWidget::setLayout(). После изменения размера виджета, компоновщик автоматически упорядочит его потомков. QGraphicsLayout наследует QGraphicsLayoutItem, поэтому он может управляться любым компоновщиком, включая собственные подклассы. Написание собственного компоновщикаВы можете использовать QGraphicsLayout в качестве основы для написания вашего собственного компоновщика (например, поточный компоновщик), но в основном он используется вместо одного из своих подклассов - QGraphicsLinearLayout или QGraphicsGridLayout. При создании собственного компоновщика должны быть переопределены как минимум следующие функции:
За подробностями о переопределении каждой функции обратитесь к документации по каждой из них. Каждый компоновщик определяет собственный API для упорядочивания виджетов и компоновщиков. Например, для сетки вы требуете индекс строки и столбца, и дополнительно протяжённость по строкам и столбцам, выравниваем, отступом и так далее. В линейном компоновщике требуется один индекс строки или столбца для расположения его элементов. Для сетки порядок вставки элементов никак не влияет на компоновку, но для линейного компоновщика порядок очень важен. При написании собственного подкласса компоновщика, вы вольны выбирать API который лучше всего подходит для вашего компоновщика. Для добавление элементов компоновщика к пользовательскому компоновщику QGraphicsLayout предоставляет удобную функцию addChildLayoutItem(). При необходимости функция будет заботиться об автоматическом изменении родителя графических элементов. Активация компоновщикаКогда изменяется геометрия компоновщика, QGraphicsLayout немедленно переупорядочивает все управляемые им элементы вызывая у каждого setGeometry(). Это переупорядочивание называется активацией компоновщика. QGraphicsLayout обновляет собственную геометрию для соответствия с contentsRect() управляемого им QGraphicsLayoutItem. Таким образом, он будет автоматически переупорядочивать все свои элементы при изменении размера виджета. QGraphicsLayout кэширует размеры всех управляемых им элементов чтобы не вызывать setGeometry() слишком часто. Замечание: QGraphicsLayout всегда будет иметь такую же геометрию как и contentsRect() виджета (не компоновщика) которому он назначен. Явная активация компоновщикаКомпоновщик может быть активирован явно одним из двух способов: вызвав activate() или вызвав invalidate(). Вызов activate() немедленно активирует компоновщик. В отличие от него, вызов invalidate() будет отложен, так как он отправляет событие LayoutRequest управляемому виджету. Из-за уплотнения событий функция activate() будет вызвана только после возвращения управления в цикл событий. Это относится к признанию компоновщика недействительным. Признание компоновщика недействительным также делает недействительной любую кэшированную информацию. Также, функция invalidate() является виртуальной. Таким образом, переопределив эту функцию в подклассе QGraphicsLayout, вы можете признавать собственный кэш недействительным. Обработка событийQGraphicsLayout слушает события управляемого им виджета с помощью виртуального обработчика событий widgetEvent(). Когда компоновщика назначается виджету, все события, доставляемые виджету, сначала обрабатываются widgetEvent(). Это позволяет компоновщику узнавать от любом важном изменении состояния виджета, таких как изменение видимости или направления компоновщика. Управления полемПоля QGraphicsLayout могут быть изменены переопределением функций setContentsMargins() и getContentsMargins(). Описание функций-членовQGraphicsLayout::QGraphicsLayout ( QGraphicsLayoutItem * parent = 0 )Создаёт объект QGraphicsLayout. parent передаётся в конструктор QGraphicsLayoutItem, а параметр QGraphicsLayoutItem isLayout устанавливается равным true. Если parent - QGraphicsWidget, то компоновщик будет установлен на этт виджет. (Обратите внимание на то, что установка компоновщика удалит компоновщик, установленный ранее.) QGraphicsLayout::~QGraphicsLayout ()Уничтожает объект QGraphicsLayout. void QGraphicsLayout::activate ()Активирует компоновщик, заставляя немедленно переупорядочиться все элементы в компоновке. Эта функция основывается на вызовах count() и itemAt(), а затем вызове setGeometry() последовательно для всех элементов. При активации компоновщик настроит свою геометрию в соответствии с родительским contentsRect(). Затем родитель признает все свои компоновщики недействительными. Если вызывается последовательно или рекурсивно, например, в ответ на изменение размера одного из упорядоченных элементов, то эта функция ничего не будет делать. Заметьте, что компоновщик может свободно использовать кэширование геометрии, для оптимизации этого процесса. Для принудительного признания любого подобного кэша недействительным, вы можете вызвать invalidate() перед вызовом activate(). Смотрите также invalidate(). void QGraphicsLayout::addChildLayoutItem ( QGraphicsLayoutItem * layoutItem ) [protected]Это вспомогательная функция, предоставляемая для пользовательских компоновок, и будут приняты все элементы компоновки и перерисованы все графические элементы для ближайшего предка компоновки QGraphicsWidget. Если layoutItem уже в другой компоновке, он будет удален из этой компоновки. Если пользовательским компоновкам нужно специальное поведение, они могут игнорировать использование этой функции и реализовать своё поведение. Эта функция была введена в Qt 4.6. Смотрите также graphicsItem(). int QGraphicsLayout::count () const [pure virtual]Эта чисто виртуальная функция должна быть переопределена в подклассе QGraphicsLayout для возвращения количества элементов в компоновке. Подкласс свободен решать как хранить элементы. Смотрите также itemAt() и removeAt(). void QGraphicsLayout::getContentsMargins ( qreal * left, qreal * top, qreal * right, qreal * bottom ) const [virtual]Переопределено из QGraphicsLayoutItem::getContentsMargins(). bool QGraphicsLayout::instantInvalidatePropagation () [static]Возвращает true, если полная иерархия виджета/компоновщика перестраивается за один шаг. Эта функция была введена в Qt 4.8. Смотрите также setInstantInvalidatePropagation(). void QGraphicsLayout::invalidate () [virtual]Очищает любую кэшируемую геометрию и информацию о подсказках о размере в компоновке и отправляет событие LayoutRequest управляемому родителю QGraphicsLayoutItem. Смотрите также activate() и setGeometry(). bool QGraphicsLayout::isActivated () constВозвращает true если компоновщик в настоящее время является активированным; в противном случае возвращает false. Если компоновщик активирован, это значит, что он в настоящее время находится в процессе переупорядочивания своих элементов (т.е. функция activate() была вызвана и еще не вернула управление). Смотрите также activate() и invalidate(). QGraphicsLayoutItem * QGraphicsLayout::itemAt ( int i ) const [pure virtual]Эта чисто виртуальная функция должна быть переопределена в подклассе QGraphicsLayout для возвращения указателя на элемент с индексом i. Переопределение может подразумевать, что i валиден (т.е. он представляет значение count()). Вместе с count() он обеспечивает способ перебора всех элементов компоновки. Подкласс свободен решать как сохранять элементы и визуальное расположение не будет отражаться через эту функцию. Смотрите также count() и removeAt(). void QGraphicsLayout::removeAt ( int index ) [pure virtual]Чистая виртуальная функция должна быть переопределена в подклассе QGraphicsLayout для удаления элемента index. Переопределение может подразумевать, что index валиден (т.е. он представляет значение count()). Реализация должна гарантировать, что parentLayoutItem() для удаленного элемента не указывает на эту компоновку, поскольку элемент считается удалённым из иерархии компоновки. Если компоновка будет повторно использована приложениями, мы рекомендуем чтобы компоновка удаляла элемент, а каркас графического представления не зависел от этого. Подкласс свободен решать как хранить элементы. Смотрите также itemAt() и count(). void QGraphicsLayout::setContentsMargins ( qreal left, qreal top, qreal right, qreal bottom )Устанавливает значение полей равными left, top, right и bottom. Значения полей по умолчанию для компоновщиков верхнего уровня зависят от стиля (запрашивая pixelMetric для QStyle::PM_LayoutLeftMargin, QStyle::PM_LayoutTopMargin, QStyle::PM_LayoutRightMargin и QStyle::PM_LayoutBottomMargin). Для компоновщиков нижнего уровня поля по умолчанию равны 0. Изменение значения полей автоматически признаёт компоновщик недействительным. Смотрите также invalidate(). void QGraphicsLayout::setInstantInvalidatePropagation ( bool enable ) [static]Вызов этой функции с enable, установленным в true, включит свойство, которое будет распространять недействительность элементов компоновщика до конечного предка за один шаг. Она будет распространяться вверх по иерархии parentLayoutItem() до тех пор, пока не достигнет корневого элемента. Если корневым элементом является QGraphicsWidget, то ему будет *отправлен* запрос на компоновку. Когда запрос на компоновку будет получен, он будет распространяться вниз по иерархии компоновщиков и виджетов и активировать все компоновщики, которые недействительны (неактивны). Это рекомендуемое поведение. Если не установлено, то оно также будет распространяться вверх по иерархии parentLayoutItem(), но остановится на первом виджете, который она встретит, и отправит запрос на компоновку виджету. Когда запрос на компоновку будет получен, это может привести к продолжению распространения вверх к parentLayoutItem() для виджета. Это будет продолжаться тем же образом, пока не будет достигнут виджет без parentLayoutItem(). Эта стратегия может привести к артефактам рисования, поскольку она завершается не за один шаг, а получение запросов на компоновку перемежается с получением событий рисования, что может привести к существенному мерцанию. Заметьте, что это не рекомендуемое поведение, но из соображений совместимости оно оставлено как поведение по умолчанию. Эта функция была введена в Qt 4.8. Смотрите также instantInvalidatePropagation(). void QGraphicsLayout::updateGeometry () [virtual]Переопределено из QGraphicsLayoutItem::updateGeometry(). void QGraphicsLayout::widgetEvent ( QEvent * e ) [virtual]Этот виртуальный обработчик событий получает все события для управляемого виджета. QGraphicsLayout использует этот обработчик событий для прослушивания важных для компоновщика событий, таких как изменение геометрии, изменение компоновки или изменением направления компоновки. e это указатель на событие. Вы можете переопределить этот обработчик событий для отслеживания похожих событий для ваших компоновщиков. Смотрите также QGraphicsWidget::event() и QGraphicsItem::sceneEvent(). |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |