Stronę tą wyświetlono już: 2260 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](https://obliczeniowo.com.pl/rysunki/Qt_Creator_przyklad_wykorzystania_klasy_QSqlTableModel.gif)
Rys. 1
Przykład współpracy klasy QSqlTableModel