Russian Qt Forum
Ноябрь 24, 2024, 14:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Динамическое добавление таба и удаление в QTabWidget  (Прочитано 10256 раз)
Jkc
Гость
« : Апрель 05, 2012, 12:46 »

В процессе работы программа получает данные ,
далее по их результату, должны появляться, изменяться, удаляться  НОВЫЕ ТАБЫ
в эти табы  встроены таблицы с данными, данные могут быть 
редактированными людьми или программой.

Вопрос в том, как  лучше всё это организовать, интересует в первую очередь динамическое создание-удаление табов и доступ к ним.
Записан
V1KT0P
Гость
« Ответ #1 : Апрель 05, 2012, 13:16 »

В процессе работы программа получает данные ,
далее по их результату, должны появляться, изменяться, удаляться  НОВЫЕ ТАБЫ
в эти табы  встроены таблицы с данными, данные могут быть 
редактированными людьми или программой.

Вопрос в том, как  лучше всё это организовать, интересует в первую очередь динамическое создание-удаление табов и доступ к ним.

При добавлении таба создается новый виджет и все объекты связанные с ним делай его детьми, тогда при удалении виджета уничтожится и все остальное.
Записан
Bepec
Гость
« Ответ #2 : Апрель 05, 2012, 13:19 »

Это возможно. Это реально. Это просто. Это стандартный функционал. QTabWidget.

А вот заполнение и контроль за данными будет на твоей совести.

2 V1KT0P - удаляться будут виджеты, а вот информация останется при правильной архитектуре.
Записан
iroln
Гость
« Ответ #3 : Апрель 05, 2012, 13:56 »

При добавлении таба создается новый виджет и все объекты связанные с ним делай его детьми, тогда при удалении виджета уничтожится и все остальное.
При добавлении таба новый виджет не создаётся. При добавлении нового таба необходимо уже существующий виджет передать в метод addTab. Кстати при удалении таба (removeTab) сам виджет не удаляется, об этом тоже надо помнить, удаляется только страница из TabWidget. Это я всё к чему написал, а к тому, что можно очень легко сделать неправильно, тогда при динамическом добавлении/удалении страниц будет течь память и могут появится всякие глюки.
Записан
Bepec
Гость
« Ответ #4 : Апрель 05, 2012, 14:09 »

Виджеты удаляются, если в качестве родителя был указан таб, который будет удаляться Улыбающийся

А сделать так, чтобы текла память и windows падала в БСОД - можно очень просто и без особых усилий.

PS при правильной архитектуре и правильном плане спокойно создаётся всё и удаляется без потерь.
Записан
Jkc
Гость
« Ответ #5 : Апрель 05, 2012, 14:25 »

Виджеты удаляются, если в качестве родителя был указан таб, который будет удаляться Улыбающийся

А сделать так, чтобы текла память и windows падала в БСОД - можно очень просто и без особых усилий.

PS при правильной архитектуре и правильном плане спокойно создаётся всё и удаляется без потерь.
Случайно нет примера по архитектуре?
Записан
iroln
Гость
« Ответ #6 : Апрель 05, 2012, 14:32 »

Виджеты удаляются, если в качестве родителя был указан таб, который будет удаляться Улыбающийся
"Таб" - это чисто виртуальный элемент, отображение. Ты понимаешь под "табом" виджет-страницу, который передаётся в TabWidget? Если так, то конечно, только я имею ввиду, что этот самый виджет-страница не удаляется при удалении таба (removeTab), то есть если требуется очистить память, занимаемую этим виджетом-страницей, нужно его удалять вручную.
Записан
Bepec
Гость
« Ответ #7 : Апрель 05, 2012, 14:40 »

Да, я имел в виду собственно удаление страницы-виджета Подмигивающий

Кхм. Дык на каждую задачу нужно своё делать. Точнее не так - я незнаю ваших задач, объёмов и прочих деталей.
Записан
Jkc
Гость
« Ответ #8 : Апрель 05, 2012, 14:56 »

как создать динамически создать таб я знаю, и как его заполнить и добавть то же, а вот как сделать механизм изменения данных
Записан
Bepec
Гость
« Ответ #9 : Апрель 05, 2012, 14:57 »

Сигнал слоты.

Неизвестно какие данные и прочая прочая прочая, устал уже писать и мысли читать одновременно Веселый
Записан
Jkc
Гость
« Ответ #10 : Апрель 05, 2012, 15:15 »

да какая разница какие данные, ну например
-----------------------------------------------
<dtata_tab>
  <id>1</id>
  <action>CREATE</action>
  <info>
      <name>Vasia</name>
     <phone>45644</phone>
  </info>
  <id>2</id>
  <action>CREATE</action>
  <info>
      <name>Kolia</name>
     <phone>222333</phone>
  </info>  
    
action == CREATE                                  
 тут мы добавили 2 новых таба с данными
т.е. в реале данных много , я их запихиваю в класс привязываю к модели модель к нужному виджету и сам виджет в
tabWidget->addVidget(MyWidget)                                                  
  --------------------------------------------------//
 далее приходит новые данные

<dtata_tab>
  <id>1</id>
  <action>DELETE</action>
  <info>
      <name>Vasia</name>
     <phone>45644</phone>
  </info>
  <id>2</id>
  <action>EDIT</action>
  <info>
      <name>Kolia</name>
     <phone>9999</phone>
  </info>    

вот тут мне нужно удалить ВАСЮ
и поменять телефон у Коли, пока я не могу понять
как мне к ним добраться, по какому признаку найти нужный таб
получить доступ к таблице и т.п.
--
В голову лезет делать что то типа map<mess_id, tab_id>
но возможно есть более элегантное решение
« Последнее редактирование: Апрель 05, 2012, 15:17 от Jkc » Записан
Jkc
Гость
« Ответ #11 : Апрель 05, 2012, 15:18 »

да какая разница какие данные, ну например
-----------------------------------------------
<dtata_tab>
  <id>1</id>
  <action>CREATE</action>
  <info>
      <name>Vasia</name>
     <phone>45644</phone>
  </info>
  <id>2</id>
  <action>CREATE</action>
  <info>
      <name>Kolia</name>
     <phone>222333</phone>
  </info>  
    
action == CREATE                                  
 тут мы добавили 2 новых таба с данными
т.е. в реале данных много , я их запихиваю в класс привязываю к модели модель к нужному виджету и сам виджет в
tabWidget->addVidget(MyWidget)                                                  
  --------------------------------------------------//
 далее приходит новые данные

<dtata_tab>
  <id>1</id>
  <action>DELETE</action>
  <info>
      <name>Vasia</name>
     <phone>45644</phone>
  </info>
  <id>2</id>
  <action>EDIT</action>
  <info>
      <name>Kolia</name>
     <phone>9999</phone>
  </info>    

вот тут мне нужно удалить ВАСЮ
и поменять телефон у Коли, пока я не могу понять
как мне к ним добраться, по какому признаку найти нужный таб
получить доступ к таблице и т.п.
--
В голову лезет делать что то типа map<mess_id, tab_id>
но возможно есть более элегантное решение
Записан
Bepec
Гость
« Ответ #12 : Апрель 05, 2012, 15:25 »

Создай мапу, или лист.  Любой контейнер, хоть вектор.

Ну и соответственно привяжи приходящие данные к нему.

В принципе всё.

PS Если непонятно, то
Код:
void changeEvent(MyEnum::dataOperation x)
{
// 3 функции адд делете редактирование  допустим
}

// cписок структур, в которых хранятся твои данные
QList<struct> listData


А как уж находить, смотреть, какие действия выполнять - эт задача уже тебе на решение.
Записан
Jkc
Гость
« Ответ #13 : Апрель 05, 2012, 17:15 »

Тут такая загвоздочка выходит,  я пошел по пути получению данных в самой модели

void TxTableModel::slotSetXmlData(int tye_doc, const QByteArray & xml)
{
    newDataCreator( tye_doc);   // тут мы создаем нужный нам объект ДАТА  по типу документа

    beginResetModel();

    QXmlInputSource inputSource;
    QXmlSimpleReader reader;

    XmlParserHandler handler(m_DataPtr); 

    inputSource.setData(xml);

    reader.setContentHandler(&handler);
    reader.setErrorHandler(&handler);
    reader.parse(inputSource);

    endResetModel();
}

получается данные внутри модели , наверное приодеться выносить это дело так как что бы прочитать что нужно сделать
нужно создать новую модель, было бы нормально если бы потом не нужно было удалять
Записан
Bepec
Гость
« Ответ #14 : Апрель 05, 2012, 17:48 »

Ааах, у вас ещё и иксемель?Непонимающий Да ещё и tableView??? Зачем тогда вы нам морочите головы табами?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.082 секунд. Запросов: 21.