19 ноября 2018 г. 6: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
  • 19 ноября 2018 г. 21: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());

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




спасибо

Комментарии

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

Внесите вклад в развитие сообщества EVILEG.

Узнайте, как стать автором сайта.

Изучить
Donate

Добрый день, Дорогие Пользователи !!!

Я Евгений Легоцкой, разработчик EVILEG. И это мой хобби-проект, который помогает учиться программированию другим программистам и разработчикам

Если сайт помог вам, и вы хотите также поддержать развитие сайта, то вы можете сделать пожертвование следующими способами

PayPalYandex.Money
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг Timeweb
g
29 мая 2020 г. 14:32
glushchenkoin

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

  • Результат:40баллов,
  • Очки рейтинга-8
АС
26 мая 2020 г. 11:29
Артём Сун-Дун-Чан

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

  • Результат:50баллов,
  • Очки рейтинга-4
МН
25 мая 2020 г. 11:33
Митя Нагибин

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

  • Результат:50баллов,
  • Очки рейтинга-4
Последние комментарии
29 мая 2020 г. 13:00
Евгений Легоцкой

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

Думал так, но похоже что нет. {{ post.votes.likes.user.username }} Это же QuerySet будет, а не отдельный единственный объект {% for vote in post.votes %} {{ vote.user.username …
29 мая 2020 г. 11:43
Владислав Меленчук

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

А как получить имя пользователя, который поставил лайк? Думал так, но похоже что нет. {{ post.votes.likes.user.username }}
29 мая 2020 г. 6:30
Евгений Легоцкой

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

У меня работает. Исправлял в проекте, который приложен к статье. А что происходит в вашем коде, с учётом места вызова этого кода, я знать не могу ;) Дебажьте и добавляйте условия, кото…
МА
29 мая 2020 г. 6:27
Михаил А

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

QModelIndexList rowIndexes = ui->tableView->selectionModel()->selectedRows(); model->removeRows(rowIndexes.first().row(), rowIndexes.size()); model-&…
29 мая 2020 г. 6:14
Евгений Легоцкой

Django - Урок 036. Как добавить аутентификацию через социальные сети. ВКонтакте

Неправильно прописали URL, на который возвращается ответ от OAuth ВКонтакте. Настраивайте ваше приложение в консоли разработчика ВКонтакте
Сейчас обсуждают на форуме
ДК
29 мая 2020 г. 13:27
Джон Кофи

QMap<> какой ключ лучше

это ясно. Вопрос в том, как быстро мапа будет отрабатывать, если ключом будет QModelIndex. Какой параметр индекса возьмет за ключ. И вот насколько это будет медленнее или быстрее, чем QString пр…
ДК
29 мая 2020 г. 11:10
Джон Кофи

QModelIndex становится не действительным, но валидный

Привет. Есть проблема с индексом и для меня это чистая магия: Сначала, что делаю: на вьюхе есть редактируемые ячейки. Пользователь редактирует одну, потом внезапно решает не сохраниться и ш…
29 мая 2020 г. 7:52
Vladimir Sergeevich

Масштабирование двумя пальцами на мобильных платформах

Я планировал описать этот момент на блоге, но никак руки не доходят (уже год). Летом дойдут. Тем не менее, у меня в репозитории лежит рабочий код игрушки "пазлы", где есть все это. …
29 мая 2020 г. 6:51
Евгений Легоцкой

Графическое ускорение

Зависит от платформы и поддерживаемых технологий. В QML в первую очередь используется OpenGL и отрисовка производится средствами GPU. Но может переключаться на использование CPU и прог…
ИП
29 мая 2020 г. 1:55
Игорь Порошин

QTablwView + QSqlQueryModel скрыть пустой столбец

Да, понятно. В данном случае лучше использовать серверную процедуру (если такие поддерживаются), в которой будет проверяться наличие всех пустых строк у нужного столбца и вызываться соответ…
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB