Название: заполнить таблицу ответом на sql-запрос Отправлено: qlewer от Май 27, 2020, 18:01 имеется sql запрос, который возвращает ответ в сотни строк по сотне колонок в каждом. затем данные заносятся в модель "поячеечно":
Код: while (query->next()) { Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: Пантер от Май 27, 2020, 18:08 Тебе нужны QSqlTableModel/QSqlQueryModel.
Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: qlewer от Май 27, 2020, 21:41 начал использовать QSqlQueryModel
действительно помогло, спасибо, но не могу найти нормальный аналог сигнала itemChanged(QStandardItem*). мне нужно получать содержимое ячейки в первой колонки той строки, в которой что-то редактируется пользователем Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: Пантер от Май 28, 2020, 08:18 Не понял, что тебе нужно. Попробуй более подробно объяснить.
Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: qlewer от Май 28, 2020, 09:44 я использовал стандартную модель. в ней был сигнал itemChanged(QStandardItem*). нужен аналог такого сигнала в QSqlQueryModel, чтобы я мог получить текст и номер строки изменяемой ячейки модели
Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: Пантер от Май 28, 2020, 10:02 Кем изменяемой? Как изменяемой? QSqlQueryModel не поддерживает редактирование через вьюху.
Советую тебе посмотреть примеры работы с QSql*Model в документации, там должны быть ответы на твои вопросы. Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: qlewer от Май 28, 2020, 11:35 - подскажите, как сделать ЭТО?
- посмотри ЭТО в документации :) Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: Пантер от Май 28, 2020, 11:44 https://doc.qt.io/qt-5/qsqlquerymodel.html
https://doc.qt.io/qt-5/qtsql-querymodel-example.html https://doc.qt.io/qt-5/qsqltablemodel.html https://doc.qt.io/qt-5/qtsql-tablemodel-example.html Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: qlewer от Май 29, 2020, 00:29 всё перепробовал, никак. необходимо по двойному щелчку в ячейке tableview с моделью qsqlquerymodel редактировать данные. не получается сделать таблицу редактируемой. есть у кого опыт?
Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: Пантер от Май 29, 2020, 08:28 QSqlQueryModel не поддерживает такого редактирования, используй QSqlTableModel
Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: qlewer от Май 29, 2020, 09:36 если я правильно прочитал описание QSqlQueryModel, эта модель выводит 1 таблицу, тогда как у меня более сложный запрос, чем просто вывод таблицы
Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: Пантер от Май 29, 2020, 09:52 Если у тебя сложный запрос и QSqlTableModel не подходит, редактирование придется реализовывать вручную. Я советую воспользоваться поиском по форуму, ибо эта тема многократно поднималась и разбиралась. Вот пример запроса для поиска:
https://duckduckgo.com/?q=site%3Aprog.org.ru+QSqlTableModel+%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&t=ffab&atb=v210-1&ia=web Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: qlewer от Май 29, 2020, 10:17 я перечитал все темы. очень часто пишут (http://www.prog.org.ru/topic_12893_0.html) про переопределение функции flags, которое позволило бы сделать ячейки редактируемыми. я создал свой класс, прописал там
Код: Qt::ItemFlags EditableSqlModel::flags( Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: Пантер от Май 29, 2020, 10:32 Это тебе ничего не даст. Еще раз повторю, поищи по форуму. Тебе придется либо написать свою модель, которая поддерживает редактирование, либо редактирование реализовать через отдельный диалог. Я бы выбрал второй путь, это проще в реализации, более юзер-френдли и даст тебе возможность использовать стандартную QSqlQueryModel.
Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: tamplier от Май 29, 2020, 15:07 если я правильно прочитал описание QSqlQueryModel, эта модель выводит 1 таблицу, тогда как у меня более сложный запрос, чем просто вывод таблицы https://doc.qt.io/qt-5/qsqlrelationaltablemodel.html (https://doc.qt.io/qt-5/qsqlrelationaltablemodel.html) - класс QSqlRelationalTableModel является наследником QSqlTableModel и обладает более высоким уровнем реализации. Она как раз для более сложных запросов, позволяет работать с несколькими связанными таблицами БД. Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: Пантер от Май 30, 2020, 15:06 Это если связанные таблицы по ключу, а если у него более сложный запрос, то не получится использовать QSqlRelationalTableModel.
Название: Re: заполнить таблицу ответом на sql-запрос Отправлено: tamplier от Май 30, 2020, 15:12 Это если связанные таблицы по ключу, а если у него более сложный запрос, то не получится использовать QSqlRelationalTableModel. Ну всегда можно связать таблицы через другие, а если нельзя, то в этом нет смысла, по крайней мере если база спроектирована грамотно... :) |