Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QTableWidget, редактирование по месту
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
rich
т.е нужно чтобы изменения внесенные пользователем в ячейках сохранялись в базу.как оптимальней сделать?
Litkevich Yuriy
Вместо QTableWidget использовать QTableView + QSqlTableModel, смотри пример
%QTDIR%\examples\sql\cachedtable

для модели выбираешь стратегию
model->setEditStrategy(QSqlTableModel::OnManualSubmit);

т.е. когда пользователь нажмет кнопку Submit тогда все изменения отправятся в БД
rich
:blink: а только с QTableWidge не пройдет?
Litkevich Yuriy
много ручной работы, да и что ты вцепился в QTableWidget, для твоей задачи удобнее использовать представление, а не просто таблицу
rich
ясно.переделывать нехотелось:)
Litkevich Yuriy
Да переделок мимнимум, возьми готовые файлы:
tableeditor.h
tableeditor.cpp
и используй вместо таблицы, т.е. вместо:
QTableWidget   *mytbl = new QTableWidget;

сделаешь так:
TableEditor   *mytbl = new TableEditor;


Предвари это дело следующими строчками соединения с БД:
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("MyBD");
if (!db.open())
{
    QString qerr = db.lastError().text();
    QMessageBox::critical(0, "Ошибка базы данных", "Невозможно установить соединение.\n\r"+qerr, QMessageBox::Cancel);
}


где:
QODBC - имя драйвера,
MyBD - имя БД.
rich
дело ещё в том что у меня таблица оч динамична.кол-во колонок зависит от одной табл БД,строк-от 2хдругих,данные же из другой табл БД..
Litkevich Yuriy
а можешь свой запрос показать, я представить немогу как можно влиять на колонки и строки одновременно
rich
Одним запросом тоже не знаю как.Попробую на словах.сейчас в дороге.выбираю из бд нужное значение кол-ва и по нужной формуле генерю колонки:setColumnCount(3+2n/*например*/).строчки:замысел из одной таблицы первое наименование,под ним всё что к нему относится из второй,второе значение первой табл.,под ним всё что к нему относится из2.дерево вобщем по двум таблицам.по ходу генерю строчки и втыкаю в них наименования.коряво наверно.надеюсь понятно изложил.код только вечером могу выложить.
Litkevich Yuriy
что-то странная у тебя структура данных, и показать такую пользователю? а у него голова не отвалится.
и как ты предпологаешь сохранять данные при таком раскладе, целостность связей сохранять?
rich
sql в принципе способен одним запросом деревья поляхать,из одной таблицы точно.из 2х не получалось.
Litkevich Yuriy
при твоей непонятной структуре не мудрено, вообще я, не спец по БД, очень просто могу извлечь хоть из тыщи, все зависит от того как ты структуру данных спроектировал.
Вот и хотелось понять что там такое у тебя

по хорошему из клиента запросы типа SELECT ..... не отправляют, обращаются к хранимой процедуре, а она возвращает нужное, при сложных запросах это вообще единственный путь, т.к. план запроса в БД будет однажды построен и выполнятся будет шустро + сервером БД.
rich
Какая есть.конечный пользователь подготовлен и эту прогу юзал,но под виндой.как пока не знаю точно.
rich
Цитата(Litkevich Yuriy @ 14.3.2008, 7:42) *
при твоей непонятной структуре

структура простая.объяснять не очень у меня получается.отобразить структуру по особенному надо еще и базу обновлять.
rich
Цитата(Litkevich Yuriy @ 14.3.2008, 7:42) *
Вот и хотелось понять что там такое у тебя


у меня там примерно следующее:
день1|день3|день5|день n|множитель|день1'|день3'|день5'|день n'|примечание
/ /1,3,5...n- задает юзер берётся из БД // день 1'= день 1*множитель

+--- родитель //родители одна табл
¦ +--- (2) ребенок //дети другая
¦ +--- (3) ребенок
¦ +--- ребенок
¦ L---ребенок
¦ всего
¦ из всех с зубами //признак зубов для ребенка задает юзер
+--- родитель2 //такая структура характерна для
¦ +--- (2) ребенок //всех дет.садов,отличаются они днями
¦ +--- (3) ребенок
¦ +--- ребенок //в табличке ещё все подкрасить надо
¦ L---ребенок
¦ всего
¦ из всех с зубами
+--- родитель3
¦ +--- (2) ребенок
¦ +--- (3) ребенок
¦ +--- ребенок
¦ L--- ребенок
¦ всего
¦ из всех с зубами
L--- родитель4
+--- (2) ребенок
+--- (3) ребенок
+--- ребенок
L---ребенок
¦ всего
¦ из всех с зубами
¦
¦ итого
L итого с зубами

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

---
еще такой вопрос, таблица родители - справочник, а вот с детьми как?
это справочники или связующие таблицы, там ограничения наложены в виде внешних ключей? или ты этим в програме занимаешся?
rich
Цитата(Litkevich Yuriy @ 14.3.2008, 23:39) *
так а примерный вид таблицы которую пользователь смотрит, можешь показать?

это и есть та сборная табл,каторую пользователю представить надо.
у деток тоже есть дети, только тут это не нужно отображать.
rich
                   день1|день3|день5|день n|множитель|день1'|день3'|день5'|день n'|примечание
                               / /1,3,5...n- задает юзер берётся из БД // день 1'= день 1*множитель

+---    родитель                 //родители одна табл
¦   +--- (2) ребенок              //дети другая табл
¦   +--- (3) ребенок
¦   +--- ребенок
¦   L---ребенок
¦         всего
¦         из всех с зубами        //признак зубов для ребенка задает юзер
+---    родитель2                    //такая структура характерна для
¦   +--- (2) ребенок             //всех дет.садов,отличаются они днями
¦   +--- (3) ребенок
¦   +--- ребенок                //в табличке ещё все подкрасить надо
¦   L---ребенок
¦         всего
¦         из всех с зубами
+---    родитель3
¦   +--- (2) ребенок
¦   +--- (3) ребенок
¦   +--- ребенок
¦   L--- ребенок
¦         всего
¦         из всех с зубами
L---    родитель4
    +--- (2) ребенок
    +--- (3) ребенок
    +--- ребенок
    L---ребенок
¦         всего
¦         из всех с зубами
¦
¦       итого
L       итого  с зубами
Litkevich Yuriy
Цитата(rich @ 15.3.2008, 3:27) *
это и есть та сборная табл,каторую пользователю представить надо

ХМ, таблица это таблица, а у тебя дерево, тоды QTreeWidget или QTreeView надо. но чтобы хранить флаги изменений данных внесенных пользователем тебе буфер нужен будет, как не крути получится некая модель данных, которя может называться хоть масивом хоть еще как-то, но смысл ее именно модель, вообщем по капай в этом направлении.
rich
Цитата(Litkevich Yuriy @ 15.3.2008, 0:40) *
Цитата(rich @ 15.3.2008, 3:27) *
это и есть та сборная табл,каторую пользователю представить надо

ХМ, таблица это таблица, а у тебя дерево, тоды QTreeWidget или QTreeView надо. но чтобы хранить флаги изменений данных внесенных пользователем тебе буфер нужен будет, как не крути получится некая модель данных, которя может называться хоть масивом хоть еще как-то, но смысл ее именно модель, вообщем по капай в этом направлении.

ok. я в QTableWidget вяжу под родителя детей и т.д. и столбики генерятся.именно таблично надо.в QTree не будет такого эффекта
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.