crossplatform.ru

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

> QTabWidget. setTabsClosable(). Закрытие табов, коннект tabCloseRequested(int)
fe120
  опции профиля:
сообщение 8.2.2010, 22:28
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 6.1.2010
Пользователь №: 1354

Спасибо сказали: 1 раз(а)




Репутация:   0  


Всем доброго времени суток.
Занимаюсь разбирательством с 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 виджета который добавлен на табу, или же нада вручную сперва удалять виджет, а только после ремовить табу.

Заранее большое спасибо откликнувшимся на возникшую проблемку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.11.2024, 20:10