Qt - wykorzystanie klasy QSqlQueryModel do wyświetlania rekordów z bazy danych w kontrolce QTableView
Stronę tą wyświetlono już: 127 razy
W kontrolce QTableView można w bardzo łatwy sposób wyświetlać dane wykorzystując klasę QSqlQueryModel. Oto przykład:
W pliku mainwindow.h:
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- #include <mysql.h>
- #include <QSqlQueryModel>
- #include <QSqlDatabase>
- #include <QSqlError>
- #include <QMessageBox>
- namespace Ui {
- class MainWindow;
- }
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- QSqlQueryModel *queryModel;
- QSqlDatabase db;
- void resizeEvent(QResizeEvent *event);
- public:
- explicit MainWindow(QWidget *parent = 0);
- ~MainWindow();
- private:
- Ui::MainWindow *ui;
- };
- #endif // MAINWINDOW_H
W pliku mainwindow.cpp:
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- db = QSqlDatabase::addDatabase("QMYSQL");
- db.setDatabaseName("library");
- db.setHostName("localhost");
- db.setPassword("password");
- db.setPort(3306);
- db.setUserName("gienek");
- if(!db.open()){
- QMessageBox::warning(this, "Database connection error", db.lastError().text());
- }
- queryModel = new QSqlQueryModel(this); // tworzę obiekt modelu
- queryModel->setQuery("SELECT id, title, author FROM books"); // dodaję zapytanie
- ui->tvBooks->setModel(queryModel); // podpinam model pod kontrolkę typu QTableView
- }
- void MainWindow::resizeEvent(QResizeEvent *event){
- QRect r = ui->centralWidget->geometry();
- ui->tvBooks->setGeometry(0, 0, r.width(), r.height());
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
Powyższy kod spowoduje wyświetlenie danych z tabeli books w kontrolce QTableView.

Rys.
1
Wyświetlanie danych z tabeli bazy danych w kontrolce QTableView