19 ноября 2018 г. 18:06

Можно ли через QTableWidget вывести результат запроса SQL

QTableWidget, Qt

Здравствуйте.

У меня есть QTableWidget .

Вот так делаю запрос в SQLite

 QSqlDatabase SearchDB = QSqlDatabase::addDatabase("QSQLITE");    
SearchDB.setDatabaseName("C:\\CVReader\\ResumeArraySQLite.db");
    if (!SearchDB.open()) {qDebug()<<"not open SQL file";}
QSqlQuery query;
    query.prepare("SELECT ...");
query.exec();

Могу я вывести результат запроса на QTableWidget ?

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
6

Добрый день.

Вот здесь есть пример с QTableWidget и базой данных , не совсем такой пример, конечно, как вы хотите, но основа там есть.

Посмотрите на содержимое этого метода

void MainWindow::createUI(const QStringList &headers)


Имхо если выводить проще QTableView пользоваться. ну и редактировать там тоже проще


Согласен с вами


V
  • 20 ноября 2018 г. 9:40
  • (ред.)

Я в своём проекте текущем пользуюсь TableView. Мне кажется преимущество его перед TableWidget в том, что у него есть метод SetModel. У TableWidget он приватный. На форме размещаю tableView и тогда смотреть всю таблицу становится очень легко.

Сначала нужно объявить модель, которую потом будем выгружать на tableView. Я обычно делаю это в конструкторе класса.

model = new QSqlRelationalTableModel(this)
Далее в модель загружаешь данные из нужной таблицы БД:
model->setTable("tableName");
Делаем выборку:
model->select();
Далее загружаешь модель в tableView:
ui->tableView->setModel(model);
И всё. Если нужны какие-то конкретные данные по результатам SQL запроса, мне кажется использовать tableView для этого неудобно. Нужно смотреть другие средства.

Для выбора конкретных данных в QSqlTableModel есть метод setFilter . Либо использовать QSqlQeryModel для выбора данных, в том числе нескольких таблиц.

    QSqlDatabase dbcenter = QSqlDatabase::database("central");
    modelTerminals = new QSqlQueryModel();
    modelTerminals->setQuery("SELECT t.terminal_id, TRIM(t.name) AS name, c.SERVER_NAME, c.DB_NAME, c.CON_PASSWORD FROM TERMINALS t "
                             "LEFT JOIN CONNECTIONS c ON t.TERMINAL_ID = c.TERMINAL_ID "
                             "WHERE t.TERMINALTYPE=3 and t.ISACTIVE='T' and c.CONNECT_ID=2 "
                             "ORDER BY t.TERMINAL_ID",dbcenter);

    modelTerminal->setHeaderData(0,Qt::Horizontal,tr("АЗС"));
    modelTerminal->setHeaderData(1,Qt::Horizontal,tr("Расположение"));

    ui->tableView->setModel(modelTerminal);
    ui->tableView->verticalHeader()->hide();

    for(int i = 2; i<modelTerminal->columnCount();++i){
        ui->tableView->hideColumn(i);
    }

    ui->tableView->resizeColumnsToContents();
    ui->tableView->verticalHeader()->setDefaultSectionSize(ui->tableView->verticalHeader()->minimumSectionSize());

Такой подход еще удобен тем, что данные из модели доступны не только для отображения а и для дальнейшего использования.




спасибо

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Donate

Здравствуйте, уважаемые пользователи EVILEG !!!

Если сайт вам помог, то поддержите разработку сайта финансово, пожалуйста.

Вы можете сделать это следующими способами:

Спасибо, Евгений Легоцкой

n
16 ноября 2019 г. 1:28
nick

C++ - Тест 001. Первая программа и типы данных

  • Результат:80баллов,
  • Очки рейтинга4
D
15 ноября 2019 г. 10:16
Daulet

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:40баллов,
  • Очки рейтинга-8
ЛП
12 ноября 2019 г. 19:22
Лев Пархимович

C++ - Тест 006. Перечисления

  • Результат:50баллов,
  • Очки рейтинга-4
Последние комментарии
b
9 ноября 2019 г. 19:28
bastonc

спасибо ещё раз. огромное, за уделённое время
b
9 ноября 2019 г. 19:24
bastonc

Спасибо Вам большое. Буду изучать.
9 ноября 2019 г. 16:58
Евгений Легоцкой

Добрый день. По первым двум вопросам вы найдёте ответ в этой статье - PyQt5 - Урок 008. Работа с QTableWidget (Обновление урока 006) Что касается последнего вопроса, то я вам…
9 ноября 2019 г. 13:50
Евгений Легоцкой

Как и обещал, вы можете посмотреть новую статью QML - Урок 037. Кастомизация кнопок в QML (Обновление урока 002) . Там же найдёте ссылку на Git репозиторий. Не забудьте поставить звёз…
b
8 ноября 2019 г. 18:40
bastonc

Приветствую. Подскажите пожалуйста пару моментов. 1. Как сделать столбец не редактируемый, а остальные ячейки остаются редактируемыми 2. Как оталвливать события двойного клика для реда…
Сейчас обсуждают на форуме
s
15 ноября 2019 г. 22:06
sladkoewka

За пример буду очень благодарен, т.к. я новичок и с подобным пока не работал.
15 ноября 2019 г. 18:37
Intruder

Евгений, почитав про эту проблему пришел к выводу, что либо нужно говорить очередь, либо все вернуть из библиотеки (dll в моем случае) в приложение, потому что в приложении все работает просто з…
15 ноября 2019 г. 17:06
Евгений Легоцкой

Ну тогда не знаю )) Я большую часть времени на C++ с Qt работаю, а PyQt5 у меня боком. Так что, чем можем помочь ))
H
15 ноября 2019 г. 16:18
Hyperfish

Да, пробовал, с преобразованием int array[]={1,2,3,4,5,6,7} в jintArray(array). Если так, то программа компилируется без ошибок и предупреждений, но вываливается с ошибкой времени выполнени…
15 ноября 2019 г. 14:48
Евгений Легоцкой

Ну собственно поэтому я и сказал, что бесполезное это занятие.
EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB