Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
19 ноября 2018 г. 12: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 ?

6

Добрый день.

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

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

void MainWindow::createUI(const QStringList &headers)


0

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


2

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


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

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

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

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

Для выбора конкретных данных в 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());

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




1

спасибо

0

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
НБ
15 февраля 2019 г. 13:09
Николай Булахтин

C++ - Тест 003. Условия и циклы

  • Результат:50баллов,
  • Очки рейтинга-4
НБ
15 февраля 2019 г. 13:03
Николай Булахтин

C++ - Тест 002. Константы

  • Результат:25баллов,
  • Очки рейтинга-10
НБ
15 февраля 2019 г. 13:01
Николай Булахтин

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

  • Результат:73баллов,
  • Очки рейтинга1
Последние комментарии
V
14 февраля 2019 г. 18:41
Vlad15007

Спасибо огромное! Заработало!
А
12 февраля 2019 г. 9:26
Александр90

Сам разборался, спасибо.
А
12 февраля 2019 г. 8:19
Александр90

День добрый! Можешь выложить форму mainwindow.ui от урока? Заранее спасибо
11 февраля 2019 г. 10:51
Евгений Легоцкой

Нет, у меня проблема с жёстким диском случилась, занимался восстановлением ПК, ещё пару вечеров придётся этим заниматься, увы.
Сейчас обсуждают на форуме
15 февраля 2019 г. 21:22
IscanderChe

Доброй ночи.Скромно напоминаю о своём вопросе...
15 февраля 2019 г. 15:36
Евгений Легоцкой

Ну я тут нашёл одно решение, но сам его не проверял. Вам нужно помещать фамилии скорее всего в ячейки заголовка, и потом просто перерисовывать их QHeaderView * header = m_ui->tableWidget...
15 февраля 2019 г. 7:53
Евгений Легоцкой

Добрый день! Не работал с remoteobjects, поэтому глянул документацию, чтобы рассмотреть, что это за зверь. После просмотра документации сложилось стойкой впечатление, что это вполне возм...
m
14 февраля 2019 г. 18:28
mr_roman

Нашел решение на Java. Удалось интегрировать в проект сервиса на Qt, теперь из Qt запускаю Java-код акселерометра.
14 февраля 2019 г. 11:00
Евгений Легоцкой

ok. I see. You changed related name Try this {% if goal.joined.all|user_in:request.user %}
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы