Russian Qt Forum
Апрель 18, 2024, 06:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: заполнить таблицу ответом на sql-запрос  (Прочитано 6480 раз)
qlewer
Новичок

Offline Offline

Сообщений: 41


Просмотр профиля
« : Май 27, 2020, 18:01 »

имеется sql запрос, который возвращает ответ в сотни строк по сотне колонок в каждом. затем данные заносятся в модель "поячеечно":
Код:
while (query->next()) {
            for(int j=0; j<spisokkolonok.count(); j++)
            {
                item = new QStandardItem();
                item->setText(query->value(j).toString());
                item->setFont(font);
                modell->setItem(i, j, item);
            }
            i++;
        }
затем модель засовывается в tableView. это происходит очень медленно (секунды). подскажите, как можно быстрее выдавать строки ответа в таблицу? (желательно, в tableView же, мне еще с ним работать потом)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Май 27, 2020, 18:08 »

Тебе нужны QSqlTableModel/QSqlQueryModel.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qlewer
Новичок

Offline Offline

Сообщений: 41


Просмотр профиля
« Ответ #2 : Май 27, 2020, 21:41 »

начал использовать QSqlQueryModel
действительно помогло, спасибо, но не могу найти нормальный аналог сигнала itemChanged(QStandardItem*).
мне нужно получать содержимое ячейки в первой колонки той строки, в которой что-то редактируется пользователем
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Май 28, 2020, 08:18 »

Не понял, что тебе нужно. Попробуй более подробно объяснить.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qlewer
Новичок

Offline Offline

Сообщений: 41


Просмотр профиля
« Ответ #4 : Май 28, 2020, 09:44 »

я использовал стандартную модель. в ней был сигнал itemChanged(QStandardItem*). нужен аналог такого сигнала в QSqlQueryModel, чтобы я мог получить текст и номер строки изменяемой ячейки модели
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Май 28, 2020, 10:02 »

Кем изменяемой? Как изменяемой? QSqlQueryModel не поддерживает редактирование через вьюху.
Советую тебе посмотреть примеры работы с QSql*Model в документации, там должны быть ответы на твои вопросы.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qlewer
Новичок

Offline Offline

Сообщений: 41


Просмотр профиля
« Ответ #6 : Май 28, 2020, 11:35 »

- подскажите, как сделать ЭТО?
- посмотри ЭТО в документации  Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Май 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
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qlewer
Новичок

Offline Offline

Сообщений: 41


Просмотр профиля
« Ответ #8 : Май 29, 2020, 00:29 »

всё перепробовал, никак. необходимо по двойному щелчку в ячейке  tableview с моделью qsqlquerymodel редактировать данные. не получается сделать таблицу редактируемой. есть у кого опыт?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Май 29, 2020, 08:28 »

QSqlQueryModel не поддерживает такого редактирования, используй QSqlTableModel
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qlewer
Новичок

Offline Offline

Сообщений: 41


Просмотр профиля
« Ответ #10 : Май 29, 2020, 09:36 »

если я правильно прочитал описание QSqlQueryModel, эта модель выводит 1 таблицу, тогда как у меня более сложный запрос, чем просто вывод таблицы
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Май 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
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qlewer
Новичок

Offline Offline

Сообщений: 41


Просмотр профиля
« Ответ #12 : Май 29, 2020, 10:17 »

я перечитал все темы. очень часто пишут (http://www.prog.org.ru/topic_12893_0.html) про переопределение функции flags, которое позволило бы сделать ячейки редактируемыми. я создал свой класс, прописал там
Код:
Qt::ItemFlags EditableSqlModel::flags(
        const QModelIndex &index) const
{
    Qt::ItemFlags flags = QSqlQueryModel::flags(index);
        flags |= Qt::ItemIsEditable;
    return flags;
}
но ничего не изменилось, я не могу редактировать ячейки. или нужно что-то где-то еще прописать?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Май 29, 2020, 10:32 »

Это тебе ничего не даст. Еще раз повторю, поищи по форуму. Тебе придется либо написать свою модель, которая поддерживает редактирование, либо редактирование реализовать через отдельный диалог. Я бы выбрал второй путь, это проще в реализации, более юзер-френдли и даст тебе возможность использовать стандартную QSqlQueryModel.
« Последнее редактирование: Май 29, 2020, 10:47 от Пантер » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
tamplier
Новичок

Offline Offline

Сообщений: 40


Просмотр профиля
« Ответ #14 : Май 29, 2020, 15:07 »

если я правильно прочитал описание QSqlQueryModel, эта модель выводит 1 таблицу, тогда как у меня более сложный запрос, чем просто вывод таблицы

https://doc.qt.io/qt-5/qsqlrelationaltablemodel.html - класс QSqlRelationalTableModel является наследником QSqlTableModel и обладает более высоким уровнем реализации. Она как раз для более сложных запросов, позволяет работать с несколькими связанными таблицами БД.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.