Название: QTableWidget и запись в БД Отправлено: skydion от Февраль 21, 2010, 11:24 Ребятя вот такая проблемка, есть QTableWidget пользователь может добавлять/удалять строчки и столпцы, незнаю как записывать все это в БД...
1. есть идея просканировать таблицу и закодировать ее в строчку и записать в таблицу в одно поле, потом нужно распарсить назаз и отобразить в модели. 2. еще есть идея записать все это дело в отдельную таблицу получив rows x columns записей, только в этом случае возникает вопрос как потом читать все в таблицу чтобы отображать в QTableView можно сделать выборку всех строк и столбцов и через цыкл записывать в ячейки модели ) Но чую что это не совсем правильный подход. У кого какие будут мысли на счет всего этого??? Название: Re: QTableWidget и запись в БД Отправлено: Karl-Philipp от Февраль 21, 2010, 12:21 Посмотрите примеры из qt/examples/sql, думаю там все то, что Вам нужно ;)
Название: Re: QTableWidget и запись в БД Отправлено: break от Февраль 21, 2010, 13:48 треш - я даже не понял у вас TableView или TableWidget - то один то другой упоминаете...
QSqlTableModel + QTableView решает все проблемы без всяких велосипедов в общем офф. документация + примеры Название: Re: QTableWidget и запись в БД Отправлено: skydion от Февраль 21, 2010, 13:56 QTableWidget :)
Для себя вроде решил, что писать каждую ячейку из таблицы в отдельную таблицу БД выгоднее чем все это кодировать раскодировать в строчку... Сейчас буду пробовать все это дело замутить... Название: Re: QTableWidget и запись в БД Отправлено: break от Февраль 21, 2010, 14:17 Цитировать Для себя вроде решил, что писать каждую ячейку из таблицы в отдельную таблицу БД выгоднее чем все это кодировать раскодировать в строчку... Сейчас буду пробовать все это дело замутить... охренеть....может лучше почитать доку и воспользоваться QSqlTableModel + QTableView чем х....ню городить? Название: Re: QTableWidget и запись в БД Отправлено: skydion от Февраль 21, 2010, 15:25 Сижу читаю ;D
Но! вопрос не в том как и чем отображать, а в том как лучше всего сохранять таблицу, я вот не представляю, или представляю не так как Вы, как сохранять таблицу размеры которой зависят от пользователя. Вот берем пример, пользователь открывает окно, задает 10 строк и 20 столбцов, вводит какие-то даные в эту таблицу. Скажем через QTableWidget я это реализовал. Тепер главный вопрос как через модель сохранить/загрузить эту таблицу в БД? Я уже писал, что представляю это как отдельную таблицу куда через модель записываем numRows * numCols записей. Вот и спрашивал правильно я думаю или нет :) возможно я что-то не понимаю, тогда подскажите. Название: Re: QTableWidget и запись в БД Отправлено: skydion от Февраль 21, 2010, 15:45 Вот сделал такой класс
Код: class TemplateModel : public QSqlTableModel не думаю что запрос должен быть тут....... Код: QSqlQuery query; дальше Код: MainWindow::MainWindow(QWidget *parent) : вот теперь как в модели выбрать даные для отображения? я понимаю что вы имеет в виду сделать так model->setTable("templates"); model->select(); но меня не интересует эта таблица, а меня интересует та которую создает пользователь и которую я хочу записать и считать из БД. Название: Re: QTableWidget и запись в БД Отправлено: skydion от Февраль 21, 2010, 17:37 Вот приведу рисунок, а то видимо всех запутал уже :)
Название: Re: QTableWidget и запись в БД Отправлено: break от Февраль 21, 2010, 20:42 понятно!
можно так: QStandartItemModel (или свой более производительный вариант наследник QAbstractItemModel) хранит в себе таблицу "шахматку" прямо по строкам и столбцам (т.е. просто модель не привязанная к БД). Чтение и запись производятся отдельными методами через вызовы QSqlQuery внтури которых просто проход сначала по столбцам, а потом по строкам. И все это также отображается в TableView. Название: Re: QTableWidget и запись в БД Отправлено: panAlexey от Февраль 21, 2010, 20:43 Вот приведу рисунок, а то видимо всех запутал уже :) и че сложного?Название: Re: QTableWidget и запись в БД Отправлено: skydion от Февраль 21, 2010, 21:10 понятно! можно так: QStandartItemModel (или свой более производительный вариант наследник QAbstractItemModel) хранит в себе таблицу "шахматку" прямо по строкам и столбцам (т.е. просто модель не привязанная к БД). Чтение и запись производятся отдельными методами через вызовы QSqlQuery внтури которых просто проход сначала по столбцам, а потом по строкам. И все это также отображается в TableView. Ну шахматка это так пример )) в таблице может быть выбрано несколько ячеек подряд по столпцу или по строке... Если я правильно понял, то делаем QStandartItemModel клас, потом задаем количество столбцов и строк, инициализируем таблицу через цикл строк * столбцы в каждуюю ячейку записываем QStandardItem. Далее когда делаем выборку даних из таблицы просто через тотже цикл меняем ячейки на даные из выборки, так??? Вообще я думал прокси модель подключить, но пока не разобрался как подключать прокси модель к QTableWidget, а в QTableView тоже много с чем не разобрался ;D короче читаю... ПС. Ну а если делать свою модель, с чего начать? Хотелось бы как-то грамотно все сделать ;) или всетаки отдельно модель, а отдельно запросы в БД это тоже нормально? Название: Re: QTableWidget и запись в БД Отправлено: break от Февраль 21, 2010, 22:12 Мне кажется "шахматка" не соответствует формату данных хранимых в БД - то есть не табличная она. Поэтому может в прямой модели смысла и нет. т.к. данные все равно преобразовываются в табличный вид и обратно. А может логичнее в своей модели для шахматки сделать функции saveToDB() loadFromDB().
proxyModel к TableWidget не привязывается никак - она привязывается к другой модели и все это отображается во View а не Widget варианте таблицы. Название: Re: QTableWidget и запись в БД Отправлено: skydion от Февраль 21, 2010, 22:16 Да нет шахматки у меня не будет я же говорю это пример чтобы можно было показать что я хочу...
Модель будет сложнее, буду сохраняться наборы ячеек или солпцов в зависимосит что буде выбрано, ну примерно так как в игре морской бой ;) Ну насчет saveToDB(), loadFromDB(), я уже такое думал, только незнаю идет оно в разрез с MVC или нет. Ну и прокси модели тоже понятно, только не понятно почему они не могут присоединяться к QTableWidget, он меня пока что во всем устраивает... Название: Re: QTableWidget и запись в БД Отправлено: break от Февраль 21, 2010, 22:35 морской бой - это шахматка
TableWidget - это не MVC Название: Re: QTableWidget и запись в БД Отправлено: skydion от Февраль 22, 2010, 09:46 Спасибо за участие )
про QTableWidget уже дочитался... Название: Re: QTableWidget и запись в БД Отправлено: Karl-Philipp от Февраль 25, 2010, 21:22 морской бой - это шахматка Как это TableWidget не MVC? Таблица - это же контрол вида, еще и для моделей. Объясни, пожалуйста :)TableWidget - это не MVC Название: Re: QTableWidget и запись в БД Отправлено: MoPDoBoPoT от Февраль 25, 2010, 22:27 Как это TableWidget не MVC? QTableWidget агрегирует в себе модель и представление, а MVC, собственно, предполагает разделение хранение данных и их представление.Название: Re: QTableWidget и запись в БД Отправлено: Karl-Philipp от Февраль 25, 2010, 22:55 спасибо :)
|