Hallo Forummitgleider,
Ich möchte eine Datenbankanbindung entwickeln. Die Oberflächenentwicklung soll dabei von der Datenbankentwicklung getrennt werden. Alle Beispiele die ich bis jetzt gefunden habe, trennen diese Funktionen nicht.
Als Erstes habe ich die Klasse z.B.
class PWindow : public QWidget, private Ui::PForm
In dieser sind mehrere QEditLine u.s.w. Die Form selbst wurde mit dem Designer erstellt. Innerhalb der Klasse kann ich auf Eigenschaften wie z.B. txt_Name->text() zugreifen.
Als Zweites habe ich folgende Klasse
class PInfo : public QObject
In dieser Klasse möchte ich die Funktionen zur DB-Anbindung definieren.
Wenn ich jedoch z.B.
void PInfo::PInsert(PWindow *daten)
definiere und auf die Daten zugreifen möchte, sind sie nicht sichtbar. Der Compiler meint:
class PWindow’ has no member named ‘txt_Name’
Ich vermute es liegt daran, dass die Objekte der Form mit dem Designer angelegt wurden. Ich habe sie weder private noch public definiert. Müsste ich das tun?
Ich habe auch in der Doku folgenden Hinweis gefunden:
QList<QWidget *> widgets = parentWidget.findChildren<QWidget *>("widgetname");
Diesen Weg finde ich aber sehr umständlich um an die Objekte der Form zu gelangen.
Wenn diesbezüglich jemand Erfahrung haben sollte oder mir einen Hinweis geben kann, würde ich mich sehr freuen.
Danke Annett
Datenbankanbindung
Datenbankanbindung
Hallo macman!
Vielen Dank für Deine Antwort. Dein Tip hilft mir bestimmt weiter.
Ich werde auch bald etwas Code zur Verfügung stellen.
Jedoch bin ich noch nicht so weit. Bis jetzt steht nur die Definition der Klasse. Das ist ja nicht so toll.
Bevor ich mich verrenne, habe ich meine Fragen erst mal ins Forum gestellt.
Bis jetzt habe ich meist ohne Oberfläche entwickelt. Ist deshalb etwas Neuland für mich.
Vielen Dank Annett
Vielen Dank für Deine Antwort. Dein Tip hilft mir bestimmt weiter.
Ich werde auch bald etwas Code zur Verfügung stellen.
Jedoch bin ich noch nicht so weit. Bis jetzt steht nur die Definition der Klasse. Das ist ja nicht so toll.
Bis jetzt habe ich meist ohne Oberfläche entwickelt. Ist deshalb etwas Neuland für mich.
Vielen Dank Annett
Datenbankanbindung
Hallo macman,
anbei nun der Code. Es funktioniert. Allerdings bin ich noch beim Überlegen ob die QList so schön ist und wie ich die DB-Verbindung deklariere. Als Beispiel und Orientierung habe ich simpletreemodel verwendet.
Tschau Annett
p_info.h
p_info.cpp
PWindow.h
pwindow.cpp
anbei nun der Code. Es funktioniert. Allerdings bin ich noch beim Überlegen ob die QList so schön ist und wie ich die DB-Verbindung deklariere. Als Beispiel und Orientierung habe ich simpletreemodel verwendet.
Tschau Annett
p_info.h
Code: Alles auswählen
#ifndef P_INFO_H
#define P_INFO_H
#include ...
class PInfo
{
private:
QString family_name;
public:
PInfo();
~PInfo();
QString InsertP();
void RefreshP(const QList<QVariant> &data);
};
#endif
Code: Alles auswählen
#include "p_info.h"
PInfo::PInfo()
{
}
PInfo::~PInfo()
{
}
void PInfo::RefreshP(const QList<QVariant> &data)
{
family_name = data.value(0).toString();
}
QString PInfo::InsertP()
{
QSqlQuery insert_query;
QString str_query;
str_query = "insert into p (family_name) values(:family_name)";
insert_query.prepare(str_query);
insert_query.bindValue(":family_name", family_name);
insert_query.exec();
if (insert_query.lastError().isValid())
{ return insert_query.lastError().databaseText(); }
else
{ return ""; }
}
Code: Alles auswählen
#ifndef _PWINDOW_H
#define _PWINDOW_H
#include "ui_PForm.h"
class PInfo; //bekannt machen
class PWindow : public QWidget, private Ui::PForm
{
Q_OBJECT
private:
PInfo *info_p;
public:
PWindow(QWidget *parent = 0);
~PWindow();
private slots:
void SaveP();
};
#endif
Code: Alles auswählen
#include "PWindow.h"
#include "p_info.h"
PWindow::
PWindow(QWidget *parent): QWidget(parent)
{
setupUi(this);
connect(but_save, SIGNAL(clicked()), this, SLOT(SaveP()));
}
PWindow::
~PWindow()
{
}
void PWindow::SaveP()
{
info_p = new PInfo();
QList<QVariant> list_p;
list_p << txt_family_name->text();
info_p->RefreshP(list_p);
QString test=info_p->InsertP();
if (!test.isEmpty())
{
QMessageBox *test_error = new QMessageBox();
test_error->information(this, tr("ERROR"), test, QMessageBox::Ok);
}
}