Название: Динамическое добавление таба и удаление в QTabWidget Отправлено: Jkc от Апрель 05, 2012, 12:46 В процессе работы программа получает данные ,
далее по их результату, должны появляться, изменяться, удаляться НОВЫЕ ТАБЫ в эти табы встроены таблицы с данными, данные могут быть редактированными людьми или программой. Вопрос в том, как лучше всё это организовать, интересует в первую очередь динамическое создание-удаление табов и доступ к ним. Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: V1KT0P от Апрель 05, 2012, 13:16 В процессе работы программа получает данные , При добавлении таба создается новый виджет и все объекты связанные с ним делай его детьми, тогда при удалении виджета уничтожится и все остальное.далее по их результату, должны появляться, изменяться, удаляться НОВЫЕ ТАБЫ в эти табы встроены таблицы с данными, данные могут быть редактированными людьми или программой. Вопрос в том, как лучше всё это организовать, интересует в первую очередь динамическое создание-удаление табов и доступ к ним. Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Bepec от Апрель 05, 2012, 13:19 Это возможно. Это реально. Это просто. Это стандартный функционал. QTabWidget.
А вот заполнение и контроль за данными будет на твоей совести. 2 V1KT0P - удаляться будут виджеты, а вот информация останется при правильной архитектуре. Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: iroln от Апрель 05, 2012, 13:56 При добавлении таба создается новый виджет и все объекты связанные с ним делай его детьми, тогда при удалении виджета уничтожится и все остальное. При добавлении таба новый виджет не создаётся. При добавлении нового таба необходимо уже существующий виджет передать в метод addTab. Кстати при удалении таба (removeTab) сам виджет не удаляется, об этом тоже надо помнить, удаляется только страница из TabWidget. Это я всё к чему написал, а к тому, что можно очень легко сделать неправильно, тогда при динамическом добавлении/удалении страниц будет течь память и могут появится всякие глюки.Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Bepec от Апрель 05, 2012, 14:09 Виджеты удаляются, если в качестве родителя был указан таб, который будет удаляться :)
А сделать так, чтобы текла память и windows падала в БСОД - можно очень просто и без особых усилий. PS при правильной архитектуре и правильном плане спокойно создаётся всё и удаляется без потерь. Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Jkc от Апрель 05, 2012, 14:25 Виджеты удаляются, если в качестве родителя был указан таб, который будет удаляться :) Случайно нет примера по архитектуре?А сделать так, чтобы текла память и windows падала в БСОД - можно очень просто и без особых усилий. PS при правильной архитектуре и правильном плане спокойно создаётся всё и удаляется без потерь. Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: iroln от Апрель 05, 2012, 14:32 Виджеты удаляются, если в качестве родителя был указан таб, который будет удаляться :) "Таб" - это чисто виртуальный элемент, отображение. Ты понимаешь под "табом" виджет-страницу, который передаётся в TabWidget? Если так, то конечно, только я имею ввиду, что этот самый виджет-страница не удаляется при удалении таба (removeTab), то есть если требуется очистить память, занимаемую этим виджетом-страницей, нужно его удалять вручную.Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Bepec от Апрель 05, 2012, 14:40 Да, я имел в виду собственно удаление страницы-виджета ;)
Кхм. Дык на каждую задачу нужно своё делать. Точнее не так - я незнаю ваших задач, объёмов и прочих деталей. Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Jkc от Апрель 05, 2012, 14:56 как создать динамически создать таб я знаю, и как его заполнить и добавть то же, а вот как сделать механизм изменения данных
Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Bepec от Апрель 05, 2012, 14:57 Сигнал слоты.
Неизвестно какие данные и прочая прочая прочая, устал уже писать и мысли читать одновременно :D Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Jkc от Апрель 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> но возможно есть более элегантное решение Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Jkc от Апрель 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> но возможно есть более элегантное решение Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Bepec от Апрель 05, 2012, 15:25 Создай мапу, или лист. Любой контейнер, хоть вектор.
Ну и соответственно привяжи приходящие данные к нему. В принципе всё. PS Если непонятно, то Код: void changeEvent(MyEnum::dataOperation x) А как уж находить, смотреть, какие действия выполнять - эт задача уже тебе на решение. Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Jkc от Апрель 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(); } получается данные внутри модели , наверное приодеться выносить это дело так как что бы прочитать что нужно сделать нужно создать новую модель, было бы нормально если бы потом не нужно было удалять Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Bepec от Апрель 05, 2012, 17:48 Ааах, у вас ещё и иксемель???? Да ещё и tableView??? Зачем тогда вы нам морочите головы табами?
Название: Re: Динамическое добавление таба и удаление в QTabWidget Отправлено: Jkc от Апрель 06, 2012, 09:41 Ааах, у вас ещё и иксемель???? Да ещё и tableView??? Зачем тогда вы нам морочите головы табами? >данных много , я их запихиваю в класс Data >привязываю к модели модель к нужному > виджету и сам виджет в НОВЫЙ таб. просто я так понял что нельзя в моем случае создавать класс Data внутри Model нужно создать объект Data и передать указатель на данные в модель ,ну и замапить указатель на данные далее при получении новых данных, менять их через указатель взятый из мапы. Вот пока думаю как получить доступ к табам для удаления p.s. данные приходят не только в xml |