Почему макет требуется для нескольких виджетов, получающих события?

На самом деле я пишу модуль в QT (container) Наследуя от QWidget который содержит несколько plots представляет graph откуда они все QWidget,

Итак, это дано:

  • 1 container могу иметь :
    • N plotгде каждый из них содержит
    • 1 graph,

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

Все plots, которые были добавлены тем же методом, в то время как container был построен уже, не смогли получить какие-либо события.

позже коллега после того, как я попросил помощи, объяснил мне, что мой container (который находится в mainwindow-form) необходимо получить раскладку в Qtdesigner. Я попробовал и был удивлен, что это решило мою проблему. После добавления динамически генерируется plotс container а также добавив их в макет, все виджеты получали события, как и ожидалось.

Но так как я не смог понять его объяснения и не хочу больше его беспокоить, я спрашиваю его здесь.

Итак, почему сгенерированные dynmacial виджеты, которые являются дочерними объектами других динамически генерируемых QWidget, требуют родительского элемента, который является дочерним для mainwindow иметь верстку?
И если это не просто исключительный случай, то почему он не назначен по умолчанию, и, кроме того, я не смог найти в Интернете случаи, когда у других возникли такие проблемы?

0

Решение

Скорее всего, вы видите побочные эффекты перекрывающихся одноуровневых виджетов или, возможно, виджетов нулевого размера. Все, что делает макет, это изменяет его размер и гарантирует, что он не перекрывается.

добавлен в контейнер в своем конструкторе, чтобы перехватывать события рисования

Что вы имеете в виду под «кэшированием» событий рисования и какое отношение это имеет к каким-либо конструкторам? Вы утверждаете, что все ваши классы (контейнер, график и график) происходят из QWidget, Они должны все реализовать paintEvent, если только они не предназначены для собственного содержимого, кроме фоновой кисти по умолчанию.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]