На самом деле я пишу модуль в QT (container
) Наследуя от QWidget
который содержит несколько plot
s представляет graph
откуда они все QWidget
,
Итак, это дано:
container
могу иметь :
plot
где каждый из них содержитgraph
,Вчера я потратил много времени на выяснение ошибки.
Случилось так, что просто н plot
s, которые (для целей отладки) были добавлены в контейнер в его конструкторе для захвата событий рисования.
Все plot
s, которые были добавлены тем же методом, в то время как container
был построен уже, не смогли получить какие-либо события.
позже коллега после того, как я попросил помощи, объяснил мне, что мой container
(который находится в mainwindow
-form) необходимо получить раскладку в Qtdesigner. Я попробовал и был удивлен, что это решило мою проблему. После добавления динамически генерируется plot
с container
а также добавив их в макет, все виджеты получали события, как и ожидалось.
Но так как я не смог понять его объяснения и не хочу больше его беспокоить, я спрашиваю его здесь.
Итак, почему сгенерированные dynmacial виджеты, которые являются дочерними объектами других динамически генерируемых QWidget, требуют родительского элемента, который является дочерним для mainwindow
иметь верстку?
И если это не просто исключительный случай, то почему он не назначен по умолчанию, и, кроме того, я не смог найти в Интернете случаи, когда у других возникли такие проблемы?
Скорее всего, вы видите побочные эффекты перекрывающихся одноуровневых виджетов или, возможно, виджетов нулевого размера. Все, что делает макет, это изменяет его размер и гарантирует, что он не перекрывается.
добавлен в контейнер в своем конструкторе, чтобы перехватывать события рисования
Что вы имеете в виду под «кэшированием» событий рисования и какое отношение это имеет к каким-либо конструкторам? Вы утверждаете, что все ваши классы (контейнер, график и график) происходят из QWidget
, Они должны все реализовать paintEvent
, если только они не предназначены для собственного содержимого, кроме фоновой кисти по умолчанию.
Я представляю, что вы как-то слишком усложняете вещи, но без самодостаточный кусок кода, который мы можем скомпилировать, чтобы повторить вашу проблему, мы будем ходить по кругу. Не стесняйтесь оглянись в моих ответах: все они состоят из одного main.cpp
иногда с небольшим количеством функциональности. Практически повсеместно нет кода, кроме необходимого для демонстрации данной техники. Ваш вопрос должен включать аналогично свернутый, компилируемый пример.
Других решений пока нет …