crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QTabWidget. setTabsClosable(). Закрытие табов
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Гость Дата 12.8.2010, 11:26
  и какая же ошибка была?
Litkevich Yuriy Дата 9.2.2010, 20:16
 
Цитата(fe120 @ 9.2.2010, 22:52) *
not deleted.
вот и ответ на твой вопрос.
fe120 Дата 9.2.2010, 19:52
  Ich verstehe =))

Removes the tab at position index from this stack of widgets. The page widget itself is not deleted.
Litkevich Yuriy Дата 9.2.2010, 12:45
 
Цитата(fe120 @ 9.2.2010, 15:20) *
Необходимо ли вручную удалять виджет привязанный к табе, для освобождения памяти?
Или же любезный QTabWidget::removeTab(index), все организует сам?
а что написано в доке про removeTab?
fe120 Дата 9.2.2010, 12:20
  и правду говорят утро вечера мудренее...
нашел абсолютно глупейшую ошибку...

А что касательно 2 вопроса?
Необходимо ли вручную удалять виджет привязанный к табе, для освобождения памяти?
Или же любезный QTabWidget::removeTab(index), все организует сам?
Litkevich Yuriy Дата 9.2.2010, 2:21
  fe120, А версия Qt какая?

Вот мой тест (все вкладки статические, созданы в дизайнере):
Прикрепленный файл  Qt_test_16.zip ( 2.78 килобайт ) Кол-во скачиваний: 251

Проверил на Qt 4.5.3 и Qt 4.6.0
MinGW/Виндовоз 2к

Багу НЕ подтверждаю
fe120 Дата 8.2.2010, 23:14
  хм..
вновь создал 7 табов, жму на закрытии 4-ой, в консоли следующее:
closeCompositionTab, index = 4 
closeCompositionTab, index = 4
closeCompositionTab, index = 4
closeCompositionTab, index = 4
closeCompositionTab, index = 4
closeCompositionTab, index = 4
closeCompositionTab, index = 4
closeCompositionTab, index = 4

тоесть при одном нажатии он множество раз прокручивает и удаляет таб который встал на индекс с номером 4 и так до тех пор пока не удалит все, что находятся правее удаляемого...
проблемму засекли, решение не соображу

Litkevich Yuriy Дата 8.2.2010, 23:01
  Добавь в функцию
Цитата(fe120 @ 9.2.2010, 1:28) *
void mainWidget::closeCompositionTab(int index)
строку:
qDebug() << "closeCompositionTab, index =" << index;
Собери программу в режиме отладки с консолью. И посмотри что будет выводить в консоль.
fe120 Дата 8.2.2010, 22:28
  Всем доброго времени суток.
Занимаюсь разбирательством с QMainWindows и QTabWidget. С первым впрочем все понятно. Со вторым же возникла следующая проблема:
Необходимо по нажатию на кнопку closetab на самой табе соответственно и закрывать табу.
Создание табы реализовано следующим образом:
widgetOnTab* mainWidget::createCompositionTab(){    
    widgetOnTab* newWidget = new widgetOnTab();
    compositionTabs->addTab(newWidget,trUtf8("Таб")+QString::number(compositionTabs->count()));
    connect(compositionTabs,SIGNAL(tabCloseRequested(int)),SLOT(closeCompositionTab(int)));
    return newWidget;
}
void mainWidget::closeCompositionTab(int index){
    compositionTabs->removeTab(index);
}

При такой реализации получается что табы успешно создаются по нажатию кнопки, а уничтожаются,при нажатии на closetab, несколько не понятно,
а точнее уничтожаются все табы находящиеся после закрываемой,включая закрываемую.
более чем уверен что ошибка кроется в моей невнимательности...
На изображениях ниже показаны эти ситуации(сверху вниз)
1 - созданы 7 табов.
2 - наводим на кнопку closetab 4 табы
3 - после нажатия убираются табы 4 - 7 включительно.
Раскрывающийся текст

Ниже представлен полный код создания окна:
Раскрывающийся текст
#include "mainWindow.h"
//#include <QtSql>

mainWindow::mainWindow(){
    mainMenu = new QMenu;

    setCentralWidget(new mainWidget());
}

widgetOnTab::widgetOnTab(QWidget* pwgt/*=0*/) : QWidget(pwgt){
    layoutOnTabWidget = new QGridLayout;
    layoutOnTabWidget->setMargin(1);
    compositionTable = new QTableWidget;
    layoutOnTabWidget->addWidget(compositionTable);
    setLayout(layoutOnTabWidget);
}

widgetOnTab* mainWidget::createCompositionTab(){    
    widgetOnTab* newWidget = new widgetOnTab();
    compositionTabs->addTab(newWidget,trUtf8("Таб")+QString::number(compositionTabs->count()));
    connect(compositionTabs,SIGNAL(tabCloseRequested(int)),SLOT(closeCompositionTab(int)));
    return newWidget;
}

void mainWidget::closeCompositionTab(int index){
    compositionTabs->removeTab(index);
}

mainWidget::mainWidget(QWidget* pwgt/*= 0*/) : QWidget(pwgt){
    layoutOnMainWidget = new QGridLayout;
    layoutOnMainWidget->setMargin(0);
    compositionTabs = new QTabWidget;
    compositionTabs->removeTab(0);
    anyButton = new QPushButton(tr("lol"));
    anybutton2 = new QPushButton(tr("lol2"));
    connect(anybutton2,SIGNAL(clicked()),SLOT(createCompositionTab()));
    connect(anyButton,SIGNAL(clicked()),SLOT(closeCompositionTab()));
    compositionTabs->setTabsClosable(true);
    layoutOnMainWidget->addWidget(compositionTabs,0,1,1,4);
    layoutOnMainWidget->addWidget(anyButton,1,0,1,1);
    layoutOnMainWidget->addWidget(anybutton2,1,1,1,1);
    mainWidget::setLayout(layoutOnMainWidget);
}

так же интересует следующее: при removeTab(index) происходит ли delete виджета который добавлен на табу, или же нада вручную сперва удалять виджет, а только после ремовить табу.

Заранее большое спасибо откликнувшимся на возникшую проблемку.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 4.5.2024, 0:51