В моем приложении есть окно, разделенное QSplitter, и мне нужно удалить виджет.
Как я могу это сделать? Я не могу найти полезные методы
В моем приложении есть окно, разделенное QSplitter, и мне нужно удалить виджет.
Как я могу это сделать? Я не могу найти полезные методы
Многие вещи в Qt не могут быть "традиционно" удалены. Вместо этого вызовите hide() и уничтожьте его. Из QSplitter документация:
Когда вы скрываете() ребенка, его пространство будет быть распределены между другими дети. Он будет восстановлен, когда вы снова показываете().
Мне не ясно, хотите ли вы сохранить виджет и поместить его в другое место, или если вы хотите уничтожить виджет.
Уничтожение виджета:. Если вы можете получить указатель на виджет, вы можете просто удалите его. Сплиттер будет безопасно получать уведомление о том, что его ребенок удаляется и удаляет его от себя.
Сохранение виджета: Если вы захватите указатель на виджет, вы можете просто установите родительский элемент на другой виджета и добавить его в другой виджета, и он будет отображаться там. Это безопасно, поскольку QSplitter будет уведомлен о том, что один его детей репаратуется.
Если вы хотите установить родительский элемент в NULL (cjhuitt answer), имейте в виду, что теперь вы отвечаете за очистку этой памяти, потому что у виджета больше нет родителя.
Мне нравится Туминоид. Но если вам это нужно, попробуйте получить виджет, который вы хотите удалить, и вызовите setParent( NULL )
в этом виджете. Это мое лучшее предположение.
Если вы держите указатель на виджет, просто удалите его или используйте deleteLater(), если хотите быть в безопасности.
Если у вас нет указателя виджета, используйте функцию QSplitter:: widget (int index). Затем вы можете использовать вызов своего слота deleteLater().
Если у вас нет индекса виджета, но вы все еще знаете виджет objectName(), то QObject:: findChild() - это ваш единственный способ получить указатель виджета.
Еще один простой способ предотвратить удаление дочернего виджета - использовать QSplitter.takeWidget(child). Это также рекомендуемый способ удаления виджета из сплиттера. (Документация Qt)
Я столкнулся с той же проблемой. В Qt 4.8, чтобы временно скрыть один из виджета QSplitter, я просто спрячу его. Однако этого недостаточно, поскольку ручка сплиттера по-прежнему доступна для перемещения. Но ручку можно также открыть и скрыть:
frameA->setVisible(conditionA);
frameB->setVisible(conditionB);
if ( !(conditionA && conditionB) ) // if only 1 frame is visible
{
splitter->handle(0)->setVisible(false);
}