Название: [решено] Куда девается содержимое первого таба при очистке? Отправлено: serg_hd от Января 25, 2010, 20:02 есть QTabWidget myTabs, табы tab1, tab2, tab3 и метод:
Код который вызывается в 2 случаях - в первом случае когда запускается программа и во-втором, когда метод является слотом на какой-либо сигнал (в моём случае на pressed qpushbutton'a). В первом случае, при загрузке, всё нормально - на каждом табе свой label. Как только вызываю метод сигналом, 1й таб сразу становится пустым, при этом на остальных label'ы на месте. Что не так? Название: Re: Куда девается содержимое первого таба? Отправлено: serg_hd от Января 25, 2010, 20:18 хотя если в методе дописать
Код то показывает, что виджет на месте. Название: Re: Куда девается содержимое первого таба? Отправлено: DS_tm от Января 25, 2010, 20:19 Сложно судить, вообще на лицо утечка памяти, может дело в этом. При вызове myTabs.clear() удаляет все указатели на виджеты из списка но не удаляет их самих.
Название: Re: Куда девается содержимое первого таба? Отправлено: serg_hd от Января 25, 2010, 20:23 пробовал
Код то же самое... Название: Re: Куда девается содержимое первого таба? Отправлено: DS_tm от Января 25, 2010, 20:31 Цитировать void QTabWidget::removeTab ( int index ) Removes the tab at position index from this stack of widgets. The page widget itself is not deleted. removeTab() тоже самое, что и clear(). Просто удаляет указатель на виджет. Попробуйте вот так: Код
Название: Re: Куда девается содержимое первого таба? Отправлено: serg_hd от Января 25, 2010, 20:32 Поменял местами 2 последних блока:
Код Заработало. Но всё равно непонятно почему 1й вариант не работает, при repaint(), update() в том числе. Название: Re: Куда девается содержимое первого таба? Отправлено: serg_hd от Января 25, 2010, 20:34 Цитировать void QTabWidget::removeTab ( int index ) Removes the tab at position index from this stack of widgets. The page widget itself is not deleted. removeTab() тоже самое, что и clear(). Просто удаляет указатель на виджет. Попробуйте вот так: Код
Название: Re: Куда девается содержимое первого таба? Отправлено: DS_tm от Января 25, 2010, 20:38 Ам, не заметил, что речь о Jambi)
А вообще, как такое может быть, что операция создания есть, а операции удаления нет? Название: Re: [решено] Куда девается содержимое первого таба при очистке? Отправлено: serg_hd от Января 25, 2010, 20:39 Без понятия (касаемо jambi может и есть, но я не в курсе). Просто java сама удаляет объекты, если на них больше нет указателей.
Название: Re: [решено] Куда девается содержимое первого таба при очистке? Отправлено: DS_tm от Января 25, 2010, 20:42 Так и какое решение в итоге? Интересно же)
Название: Re: [решено] Куда девается содержимое первого таба при очистке? Отправлено: serg_hd от Января 25, 2010, 20:45 Просто переставить местами блоки (я выше привёл код). Добавлять к табам нужно уже "подготовленные" виджеты. Так конечно даже логически правильней, но всё равно непонятно, почему в первом варианте дефект только на 1м табе (без ошибок и т.п., просто он визуально пустой).
Название: Re: [решено] Куда девается содержимое первого таба при очистке? Отправлено: DS_tm от Января 25, 2010, 20:53 Скорее всего вы сначала вызываете эту функцию, а потом делаете tableWidget->show(). Соответственно при show() происхоит перерисовка виджитов, и tabWidget понимает, что tab1 содержит QLabel. А когда выполняете эту функцию повторно, то tabWidget уже отображен, и следовательно выводит tab1 пустым, сразу после того, как вы его добавляете.
Название: Re: [решено] Куда девается содержимое первого таба при очистке? Отправлено: serg_hd от Января 25, 2010, 21:23 Я ж написал что "не работает, при repaint(), update() в том числе". Проверял я это. И во-вторых, почему тогда другие два виджета отображаются?
Название: Re: [решено] Куда девается содержимое первого таба при очистке? Отправлено: SABROG от Января 25, 2010, 21:54 Я ж написал что "не работает, при repaint(), update() в том числе". Проверял я это. И во-вторых, почему тогда другие два виджета отображаются? Любому созданному виджету нужно вызывать show(), т.к. по умолчанию он спрятан. Если виджет является дочерним, то достаточно вызывать show() у главного виджета, тогда методы show() у всех деток он вызовет сам. У вас получается ситуация, когда первый виджет на экране удалил всех детей и даже когда ему их добавили show() у него повторно не вызывается в отличае от новых вкладок, которые спрятаны до того момента пока на них не кликнут. Попробуй вызывать show() у tab1, tab2, tab3 уже после того как на них были добавлены дети. Название: Re: [решено] Куда девается содержимое первого таба при очистке? Отправлено: serg_hd от Января 25, 2010, 22:10 Любому созданному виджету нужно вызывать show(), т.к. по умолчанию он спрятан. Если виджет является дочерним, то достаточно вызывать show() у главного виджета, тогда методы show() у всех деток он вызовет сам. У вас получается ситуация, когда первый виджет на экране удалил всех детей и даже когда ему их добавили show() у него повторно не вызывается в отличае от новых вкладок, которые спрятаны до того момента пока на них не кликнут. Попробуй вызывать show() у tab1, tab2, tab3 уже после того как на них были добавлены дети. Попробовать сейчас не смогу, т.к. код менять назад неохота. Но со сказанным согласен, уверен что заработало бы.п.с. хотя опять же интересно почему помогла перестановка блоков, ведь show() я там нигде не применял, разве что если show() срабатывает сразу после addTab()... Название: Re: [решено] Куда девается содержимое первого таба при очистке? Отправлено: DS_tm от Января 25, 2010, 22:38 Именно так. Для вновь добавленного таба вызываеться show, если табВиджет уже отрисован.
Название: Re: [решено] Куда девается содержимое первого таба при очистке? Отправлено: SABROG от Января 25, 2010, 22:50 Именно так. Для вновь добавленного таба вызываеться show, если табВиджет уже отрисован. В этом случае скорее он не вызывается для виджета, который уже отрисован и вызывается только на вкладках по которым кликнули, чтобы они показались из хайда. |