Általában ennél a pontnál kezdődik az anyázás. A leírásban van hivatkozás letöltendő mysql header filokra, meg fordítsuk le, meg hova kellene bemásolni a lefordított dll (linux: so) filet, hogy meg is találja a progi. Egy igen egyszerű megoldás:
1. A képen két fontos beállítás látható jobboldalt:
- a QtSql be van jelölve, ez betölti az adatbázis drivereket
- CONFIG += console, ennek segítségével tudunk a qDebug() függvénnyel dolgokat kiiratni a "dos" ablakba windows alatt.
Felmerülhet a kérdés, hogy miért tölti be a netbeans az adatbázis drivereket, míg a Qt Creator nem. Az ok igen egyszerű, és nem informatikai: a MySql átadta az ingyenes drivereket a Netbeans-nek, a Qt Creator-t fejlesztő cégnek pedig beintett.
Ez az egyik igen nyomós érv a Qt Designer + Netbeans combo mellett.
Milyen adatbázis drivereket tudunk elérni a két op. rendszer alatt?
Egy igen bonyolult, hosszú tervezést igénylő programmal tudjuk kiiratni:
#include <QSqlDatabase>
MainForm::MainForm() {
widget.setupUi(this);
QStringList x;
x = QSqlDatabase::drivers();
widget.listWidget->addItems(x);
}
És a várva várt eredmény:
Miután minden fontos info birtokába jutottunk, nézzük hogy tudunk az adatbázishoz kapcsolódni.
bool MainClass::db_init() {
#ifdef Q_OS_WIN
db_leiro = QSqlDatabase::addDatabase("QODBC");
#else
db_leiro = QSqlDatabase::addDatabase("QMYSQL");
#endif
db_leiro.setHostName("localhost");
db_leiro.setDatabaseName("qt_labor");
if (db_leiro.open("stu06", "kilep") == false) {
QMessageBox::critical(0, "Hiba", trUtf8("Nem tudom megnyitni az adatbázist."), QMessageBox::Ok);
return false;
}
return true;
}
Részletesen:
A futtató op.rendszertől függően töltjük be a drivert. Itt feltételezem, hogy csak windows és linux alatt futhat a progi. Ha van más is, pl. Mac, akkor tovább kell cifrázni.
A db_leiro egy QSqlDatabase típusú változó, késöbb ezt adom át a többi modal ablaknak azok konstruktorában, (pl. login), hogy ne kelljen mindig megnyitogatni az adatbázist. Query létrehozásánál (QSqlQuery query(db_leiro);) használom. A többi gondolom nem okoz gondot:).
trUtf8 az ékezetes karakterek kiiratását intézi. Az addDatabase utasításban megadhatunk egy, a kapcsolatra utaló latin1 szöveget is. Ennek akkor van szerepe, ha több adatbázishoz kapcsolódunk, és így tudjuk kiválasztani az aktuálisat.
Figyelem: a removeDatabase(kapcsolat neve) utasítást csak akkor hívhatjuk meg eredményesen, ha kilépünk az addDatabase()-t futtató osztályból. Tehát, ha a MainClass-ban van az addDatabase(), akkor az osztályt hívó részben tudjuk futtatni a removeDatabase()-t.
int main(int argc, char *argv[]) {
// initialize resources, if needed
// Q_INIT_RESOURCE(resfile);
QApplication app(argc, argv);
MainClass x;
x.show();
// ide tehetjük a removeDatabase-t
// create and show your widgets here
return app.exec();
}
Legközelebb QTreeWidget