Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: semantic от Январь 05, 2012, 07:40



Название: table и tabs
Отправлено: semantic от Январь 05, 2012, 07:40
Здравствуйте. Подскажие пожалуйста, возможно ли у tablewidget реализовать вкладки (tabs)?


Название: Re: table и tabs
Отправлено: kambala от Январь 05, 2012, 11:09
самое простое - навешивать QTableWidget внутрь каждой вкладки QTabWidget


Название: Re: table и tabs
Отправлено: semantic от Январь 05, 2012, 12:11
Этот вариант имеет место быть, просто в каждой вкладке будет всего один компонент-таблица, и будет не совсем удобно в дальнейшем работать, т.е. открою 10 вкладок, и надо будет узнавать активную вкладку, каким-то образом обратиться к таблице, ну думаю вариантов то и не много у меня!


Название: Re: table и tabs
Отправлено: antipart от Январь 05, 2012, 12:19
если правильно понял.. и QTableWidget критично должен быть один
есть еще вариант использовать QTabBar и синхронизировать вкладки с перезагрузкой данных в виджете,
но такой вариант лучше применять  в связке с Model/View - просто апдейтить модель с разными условиями
или разные модели подключать к вьюхе... где-то так. :)


Название: Re: table и tabs
Отправлено: semantic от Январь 05, 2012, 12:40
если правильно понял.. и QTableWidget критично должен быть один
есть еще вариант использовать QTabBar и синхронизировать вкладки с перезагрузкой данных в виджете,
но такой вариант лучше применять  в связке с Model/View - просто апдейтить модель с разными условиями
или разные модели подключать к вьюхе... где-то так. :)

да желательно чтоб был table один(так будет намного проще, и не надо их каждый раз создавать)

про Ваш вариант не понял.


Название: Re: table и tabs
Отправлено: antipart от Январь 05, 2012, 12:57
размещаешь на форму QTabBar и QTableWidget
у QTabBar есть сигнал QTabBar::currentChanged ( int index )
в своем слоте в зависимости от значения index загружаешь те или иные данные в  QTableWidget
приблизительно так:
Код:
 switch(index)
{
   case 0: getMyData1(); break;
   case 1: getMyData2(); break;
}
в getMyData() стираешь данные в QTableWidget и вставляешь новые

но.. опять-таки в данном случае лучше посмотреть в сторону Model/View


Название: Re: table и tabs
Отправлено: semantic от Январь 05, 2012, 13:03

Код:
 switch(index)
{
   case 0: getMyData1(); break;
   case 1: getMyData2(); break;
}
дело то в том что, количество вкладок динамическое, такая проверка не пойдет.


Название: Re: table и tabs
Отправлено: antipart от Январь 05, 2012, 13:18
дело то в том что, количество вкладок динамическое, такая проверка не пойдет.
в первом вашем посте это не указано... надо более подробно описывать задачу...

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


Название: Re: table и tabs
Отправлено: semantic от Январь 05, 2012, 14:23

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


Название: Re: table и tabs
Отправлено: antipart от Январь 05, 2012, 14:32
в каждой вкладке будет тока таблица, и все действия тока с ней.
это понятно....
а данные которыми заполняете таблицу вы как формируете?
если вкладок несколько, то подразумевается, что данные меняются...
а если вкладки формируются динамически, то и данные должны также формироваться(динамически)
т.е. на момент появления новой вкладки вы уже должны знать чем заполнить таблицу на ней...
я правильно понял?


Название: Re: table и tabs
Отправлено: semantic от Январь 05, 2012, 14:46
Цитировать
а данные которыми заполняете таблицу вы как формируете?
данные это просто list QString-а, который мне будет известен
Цитировать
если вкладок несколько, то подразумевается, что данные меняются...
т.е. на момент появления новой вкладки вы уже должны знать чем заполнить таблицу на ней...
я правильно понял?
все верно, так и есть, при создании вкладки я уже буду знать чем заполнить таблицу


Название: Re: table и tabs
Отправлено: antipart от Январь 05, 2012, 15:45
Цитировать
данные это просто list QString-а, который мне будет известен
ну здесь придется  хранить эти листы если хочешь использовать один виджет ,
причем не важно QTableWidget это ил Model/View
например так:
Код:
QList<QStringList> hashList
т.е. при добавлении новой вкладки добавляешь и новый QStringList в hashList
а пото делаешь так как я писал раньше
Код:
  getMyData(hashList.at(index);
только в слоте можно уже будет обойтись без свича... ;)
соответственно при удалении вкладки надо и QStringList в hashList удалять соответсвующий...


Название: Re: table и tabs
Отправлено: antipart от Январь 05, 2012, 16:16
а если еще буду и столбцы меняться то надо будет хранить по два листа для каждой вкладки
например
Код:
QList<QPair<QStringList QStringList>> hashList
первый это headerList второй dataList
думаю так...


Название: Re: table и tabs
Отправлено: semantic от Январь 06, 2012, 07:04
antipart т.е. всеже использовать qtabba


Название: Re: table и tabs
Отправлено: semantic от Январь 06, 2012, 08:18
вроде да, такой вариант получается! пасиб за помощь.


Название: Re: table и tabs
Отправлено: fuCtor от Январь 06, 2012, 13:12
Выкидываем различные списки внешние за ненадобностью. Если нельзя оперировать индексом закладки, то можно оперировать данными привязанными к этой закладке. Читаем документацию по:
Код
C++ (Qt)
void QTabBar::setTabData ( int index, const QVariant & data )
QVariant QTabBar::tabData ( int index ) const
 

При создании задаем нужные данные (хоть указатель на модель).
При смене читаем установленные данные по активному индексу
PROFIT!!!


Название: Re: table и tabs
Отправлено: fuCtor от Январь 06, 2012, 13:15
Выкидываем различные списки внешние за ненадобностью. Если нельзя оперировать индексом закладки, то можно оперировать данными привязанными к этой закладке. Читаем документацию по:
Код
C++ (Qt)
void QTabBar::setTabData ( int index, const QVariant & data )
QVariant QTabBar::tabData ( int index ) const
 

При создании задаем нужные данные (хоть указатель на модель, хоть QStringList).
При смене читаем установленные данные по активному индексу
PROFIT!!!


Название: Re: table и tabs
Отправлено: antipart от Январь 06, 2012, 17:37
Выкидываем различные списки внешние за ненадобностью. Если нельзя оперировать индексом закладки, то можно оперировать данными привязанными к этой закладке. Читаем документацию по:
Код
C++ (Qt)
void QTabBar::setTabData ( int index, const QVariant & data )
QVariant QTabBar::tabData ( int index ) const
 

При создании задаем нужные данные (хоть указатель на модель).
При смене читаем установленные данные по активному индексу
PROFIT!!!

да, вы правы, удобное решение, если один QStringList надо хранить...
а если два или свой указатель, то здесь, я так понял, уже через Q_DECLARE_METATYPE(MyStruct)


Название: Re: table и tabs
Отправлено: semantic от Январь 07, 2012, 07:54
Можно, но данный будут генерироваться при создании вкладки, и затем будут при определенных действиях менять в таблице.


Название: Re: table и tabs
Отправлено: fuCtor от Январь 07, 2012, 08:58
Выкидываем различные списки внешние за ненадобностью. Если нельзя оперировать индексом закладки, то можно оперировать данными привязанными к этой закладке. Читаем документацию по:
Код
C++ (Qt)
void QTabBar::setTabData ( int index, const QVariant & data )
QVariant QTabBar::tabData ( int index ) const
 

При создании задаем нужные данные (хоть указатель на модель).
При смене читаем установленные данные по активному индексу
PROFIT!!!

да, вы правы, удобное решение, если один QStringList надо хранить...
а если два или свой указатель, то здесь, я так понял, уже через Q_DECLARE_METATYPE(MyStruct)
Меня например никогда не останавливала необходимость объявления нового метатипа, если это облегчит жизнь.

Можно, но данный будут генерироваться при создании вкладки, и затем будут при определенных действиях менять в таблице.
Так меняйте данные и в закладке по мере необходимости. Используя хранения связанных данных в закладке можно решить проблемы сохранения целостности данных, а именно если например закладки поменять местами, то при использовании внешнего хранилища необходимо его синхронизировать, так же при добавлении в произвольное место и удаление любой вкладки. При использовании моего варианта об этом даже думать не нужно будет.


Название: Re: table и tabs
Отправлено: semantic от Январь 07, 2012, 14:10
немного не понял, мне следить не надо, вкладка будет открываться восновном с одним содержим данных в таблице,  и уже в дальнейшем эти данные будут меняться.