Как удалить QWidgets из QSplitter

13
задан user35443 3 July 2017 в 16:21
поделиться

5 ответов

Много вещей в QT не могут быть "традиционно" удалены. Вместо этого вызов скрывает () на нем и разрушает его. От документация QSplitter :

при сокрытии () ребенка, его пространство будет распределено среди других детей. Это будет восстановлено при показе () его снова.

13
ответ дан 1 December 2019 в 19:32
поделиться

Мне нравится ответ Tuminoid. Но если Вам абсолютно нужен в удаленный, попытайтесь получить виджет, который Вы хотите удалить, и вызов setParent( NULL ) на том виджете. Это - мое лучшее предположение.

1
ответ дан 1 December 2019 в 19:32
поделиться

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

  • Уничтожение виджета: , Если можно получить указатель на виджет, можно просто удалить его. Разделитель будет безопасно уведомлен, что его дочерний элемент удаляется и удалит его из себя.

  • Сохранение виджета: при захвате указателя на виджет можно просто установить его родителя на некоторый другой виджет и добавить его к расположению другого виджета, и он обнаружится там. Это безопасно, потому что QSplitter будет уведомлен, что один из его детей повторно порождается.

, Если Вы хотите установить родителя в NULL (ответ cjhuitt) знать, что Вы теперь ответственны за чистку той памяти, потому что виджет больше не имеет родителя.

22
ответ дан 1 December 2019 в 19:32
поделиться

Если Вы держите указатель на виджет, то просто удаляют его или используют deleteLater (), если Вы хотите быть на безопасной стороне.

, Если у Вас нет указателя виджета, используйте QSplitter:: виджет (международный индекс) функция. Затем можно использовать, вызывают его deleteLater () слот.

, Если у Вас нет индекса виджета, но Вы все еще знаете имя объекта виджета (), тогда QObject:: findChild () является Вашим единственным способом получить указатель виджета.

0
ответ дан 1 December 2019 в 19:32
поделиться

Другой простой способ предотвратить удаление дочернего виджета - использовать QSplitter.takeWidget (child). Это также рекомендуемый способ удаления виджета из разделителя. (Документация Qt)

-1
ответ дан 1 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: