Ich versuche gerade meine Datenbank unabhängig (heißt Struktur und i/o weitestgehend aus der ui rauszuhalten) zu machen. Dabei habe ich mich des Beispieles "sqlwidgetmapper" bedient.
Leider bekomme ich es nicht hin z.B. eine Spalte einer Tabelle mit einer Dropbox zu verknüpfen. Hier einmal ein Demoprojekt:
main.cpp
Code: Alles auswählen
#include <QtGui/QApplication>
#include "demogui.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Demogui w;
w.show();
return a.exec();
}
Code: Alles auswählen
#ifndef DEMOGUI_H
#define DEMOGUI_H
#include <QMainWindow>
#include "dbconnector.h"
namespace Ui {
class Demogui;
}
class Demogui : public QMainWindow
{
Q_OBJECT
public:
explicit Demogui(QWidget *parent = 0);
~Demogui();
private:
Ui::Demogui *ui;
dbconnector *db;
};
#endif // DEMOGUI_H
Code: Alles auswählen
#include "demogui.h"
#include "ui_demogui.h"
#include "dbconnector.h"
#include "QSqlRelationalTableModel"
Demogui::Demogui(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Demogui)
{
ui->setupUi(this);
db = new dbconnector();
QSqlRelationalTableModel* model = db->getDirectionModel();
ui->comboBoxDirection->setModel(model);
ui->comboBoxDirection->setModelColumn(db->getDirectionFieldIndex());
}
Demogui::~Demogui()
{
delete ui;
delete db;
}
dbconnector.h
Code: Alles auswählen
#ifndef DBCONNECTOR_H
#define DBCONNECTOR_H
#include <QtSql>
class dbconnector
{
public:
dbconnector();
~dbconnector();
QSqlRelationalTableModel *getDirectionModel();
int getDirectionFieldIndex();
private:
QSqlDatabase db;
QSqlRelationalTableModel *directionModel;
};
#endif // DBCONNECTOR_H
Code: Alles auswählen
#include "dbconnector.h"
#include <QtSql>
#include <QDebug>
dbconnector::dbconnector()
{
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
if (!db.open()) {
qDebug() <<
"Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it.";
return;
}
QSqlQuery query;
// Datenbank erstellen
query.exec("create table person (name varchar(50), birthday date)");
query.exec("create table testseries (person_id int, comment varchar(255))");
query.exec("create table testtype (name varchar(10))");
query.exec("create table subconfig (variable varchar(50), value varchar(255))");
query.exec("create table config (subconfig_id int, name varchar(20))");
query.exec("create table config_collection (id int, config_id int, name varchar(20))");
query.exec("create table test (testseries_id int, testdate date, testtype_id tinyint, config_collection_id int)");
query.exec("create table direction_key (direction varchar(5))");
query.exec("create table single_test (test_id int, direction_id tinyint, key_id tinyint, time int)");
query.exec("insert into testtype (id, name) values (1,'rotation')");
query.exec("insert into testtype (id, name) values (2,'jump')");
query.exec("insert into testtype (id, name) values (3,'anti'");
query.exec("insert into direction_key (id, direction) values (1,'right')");
query.exec("insert into direction_key (id, direction) values (2,'left')");
query.exec("insert into direction_key (id, direction) values (3,'up')");
query.exec("insert into direction_key (id, direction) values (4,'down')");
// Testdaten generieren
query.exec("insert into person (name, birthday) values ('Max Mustermann'', '1990-12-24')");
query.exec("insert into testseries (id, person_id, comment) values (1,1,'Testreihe 2010')");
query.exec("insert into test (id, testseries_id, testdate, testtype_id) values (1,1,'2010-08-27',1)");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (1,1,1,1,334");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (2,1,2,2,434");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (3,1,4,3,421");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (4,1,4,4,389");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (5,1,3,2,405");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (5,1,2,2,699");
query.exec("insert into test (id, testseries_id, testdate, testtype_id) values (2,1,'2010-08-28',1)");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (1,1,1,1,234");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (2,1,2,2,534");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (3,1,4,3,441");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (4,1,4,4,429");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (5,1,3,2,395");
query.exec("insert into single_test (id, test_id, direction_id, key_id, time) values (5,1,2,2,546");
}
dbconnector::~dbconnector() {
db.close();
QSqlDatabase::removeDatabase("QSQLITE");
}
QSqlRelationalTableModel *dbconnector::getDirectionModel() {
directionModel = new QSqlRelationalTableModel();
directionModel->setTable("direction_key");
return directionModel;
}
int dbconnector::getDirectionFieldIndex() {
return directionModel->fieldIndex("direction");
}