Qt - wykorzystanie klasy QSqlTableModel do wyświetlania rekordów z bazy danych w kontrolce QTableView

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2069 razy

Klasa QSqlTableModel również pozwala na wyświetlanie danych w kontrolce QTableView, różnica pomiędzy tą klasą a omawianą wcześniej QSqlQueryModel jest taka, że w przypadku klasy QSqlTableModel możliwa jest edycja pól. Niestety klasa QSqlTableModel ma też dość paskudne ograniczenia, które uniemożliwiają np ograniczenie liczby pobieranych z bazy danych elementów oraz wyboru kolumn, które mają być wyświetlane. Niemniej jednak oto przykładowy kod wykorzystujący tą klasę:

Plik mainwindow.h:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <mysql.h> #include <QSqlDatabase> #include <QSqlTableModel> #include <QSqlError> #include <QDebug> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT QSqlDatabase db; // baza danych QSqlTableModel *table; // wskaźnik na obiekt klasy QSqlTableModel void resizeEvent(QResizeEvent *); 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()){ qDebug() << "Can't connect to database. Error: " << db.lastError().text(); } table = new QSqlTableModel(this, db); // tworzę obiekt klasy QSqlTableModel table->setTable("books"); // ustawiam tabelę, z której będę korzystał table->select(); // wysyłam zapytanie selekt ui->books->setModel(table); // podpinam model tabeli do kontroli typu QTableView } MainWindow::~MainWindow() { delete ui; } void MainWindow::resizeEvent(QResizeEvent *event){ QMainWindow::resizeEvent(event); QRect r = ui->centralWidget->geometry(); ui->books->setGeometry(0, 0, r.width(), r.height()); }
Przykład współpracy klasy QSqlTableModel
Rys. 1
Przykład współpracy klasy QSqlTableModel
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5/qsqldatabase.html - opis klasy QSqlDatabase na stronie dokumentacji Qt
  2. doc.qt.io/qt-5/qsqlquerymodel.html - opis klasy QSqlQueryModel na stronie dokumentacji Qt
  3. doc.qt.io/qt-5/qsqltablemodel.html - opis klasy QSqlTableModel na stronie dokumentacji Qt
Propozycje książek