Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аналог DataTable из .NET в Qt, Нужна таблица для работы с данными 
V
    Опции темы
franzR
Дата 31.5.2011, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



Интересует таблица в которую можно в ручную внести данные не связывая ни с какой SQL таблицей или чем то прочим. 

Знаю что есть QSqlTableModel, но она заточена для манипулирования данными в SQL таблице. Вот как в .NET DataTable. Интересует такой аналог по простой причине, чтоб можно было делать Select из такой таблицы как в .NET DataTable, быстрое перемещение по данным и такая же быстрая их обработка.
PM MAIL   Вверх
Artemon
Дата 31.5.2011, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 2
Всего: 20



QTableWidget


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
franzR
Дата 3.6.2011, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



Хорошо если его использовать как скрытый компонент, то согласен. А если мне нужно потом вывести все это на форму:
в .NET это делается так 

Код

DataGridView dgv = new DataGridView();

DataTable dt = new .... bla bla;

dgv.DataSource = dt;


и все, все шлепнулось на форму. 

Возможно ли в Qt проделать что то вроде такого?


PM MAIL   Вверх
bsa
Дата 3.6.2011, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Любой наследник QWidget (QTableWidget в том числе) может быть помещен на форму. Более того, может быть сам формой!
Код
QWidget *form;
QTableWidget *table;
...
table->setParent(form);

PM   Вверх
math64
Дата 3.6.2011, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



В Qt это делается так:
Код

class MyTableModel : public QAbstractTableModel {
...
};

MyTableModel* model = new MyTableModel();
table->setModel(model);


PM   Вверх
borisbn
Дата 4.6.2011, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(math64 @  3.6.2011,  21:52 Найти цитируемый пост)
В Qt это делается так:

зачем, если
Цитата(franzR @  31.5.2011,  15:42 Найти цитируемый пост)
Интересует таблица в которую можно в ручную внести данные не связывая ни с какой SQL таблицей или чем то прочим. 


Artemon дал ответ. первым же сообщением - QTableWidget.
Если же таблица будет большая, сложная, с возможностью сортировки, подсветки строки в зависимости от одного поля и т.п., то да, нужно наследоваться от модели и переписывать ф-цию data.



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
franzR
Дата 17.6.2011, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



Добрый день. Может нужно бы создать новую тему но все же попробую спросить еще в этой.

Спасибо за совет с QTableWidget, немного разобрался.

Теперь вопрос следующего характера.

Вот на форме добавляются данные пользователем в QTableWidget в которой cellWidget, благо, позволяет добавить в себя различные виджеты, и я использую там много QComboBox-ов. Вычитывание из SQLITE базы проходит отлично и я заполняю табличку данными и комбо боксы выставлены в нужных позициях, и все хорошо когда нужен SELECT или INSERT. Но вот теперь чтоб UPDATE сделать т.е. все эти выбранные из базы и намодифицированные пользователем  данные снова легли в базу не могу понять как его сделать.

Увидел возможность работать с моделью "Model-Based" как то так
Код

QSqlTableModel *model = new QSqlTableModel(this,Sql->GetDatabase());
model->setTable("users");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();

ui->tableView->setModel(model); //и тут все вытащилось в табличку на форме и даже позволяет редактировать и применять изменения таблице прямо в базу



Казалось бы идеальный вариант... И в QTableWidget есть setModel() но он приватный и юзать его нельзя. Пошерстив в инете пока не смог найти как бы его прикрутить данные из моего уже хорошо редактируемого QTableWidget  в QSqlTableModel чтоб та, прекрасно себе приняла изменения и внесла их в базу....

Пока на ум приходит одно решение, сравнивать выбранные данные из QSqlTableModel с теми что отредактированные были QTableWidget пользователем, а уже перед занесением изменений, менять в ручную QSqlTableModel  и делать submitAll ()...

Но мне кажется что это мартышкин труд, подскажите пожалуйста как это сделать правильно? 
PM MAIL   Вверх
Greeneyed
Дата 17.6.2011, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 20.4.2006

Репутация: нет
Всего: нет



По хорошему тебе надо было пользоваться QTableView, чтобы можно было его легко связать с моделью. А для вставки в таблицу комбобоксом, нужно было написать свой делегат. В делегате нужно было бы переопределить методы редактирования и, если ты хочешь отображать комбобокс в режиме просмотра, переопределить paint() .
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0726 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.