GUI von Datenbank erstellen
GUI von Datenbank erstellen
Hey @all,
ist es möglich eine GUI mittels einer Datenbank dynamisch zu erstellen (QLabels, QTextfields, QPushbuttons, ...) und falls ja, wie fange ich am besten damit an?
LG NoRulez
ist es möglich eine GUI mittels einer Datenbank dynamisch zu erstellen (QLabels, QTextfields, QPushbuttons, ...) und falls ja, wie fange ich am besten damit an?
LG NoRulez
selbstverständlich geht das..... XML-Beschreibung (also den Inhalt der UI-Datei) als BLOB eintragen.. danach ungefähr:
http://doc.trolltech.com/4.4/qformbuilder.html
Code: Alles auswählen
MyDbForm::MyDbForm(QWidget *parent)
: QWidget(parent)
{
QFormBuilder builder;
QBuffer uiData;
uiData.setData(getBlobFromDb()); // SELECT data FROM uitable WHERE ... wasauchimmer
QWidget *myWidget = builder.load(&uiData, this);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(myWidget);
setLayout(layout);
}
Wobei die Frage sehr viel Raum für Spekulationen lässt...
Meine geht in die Richtung
http://doc.trolltech.com/main-snapshot/ ... apper.html
in Kombination mit einem QSql(Relational)TableModel.

Wer bietet mehr?
Meine geht in die Richtung
http://doc.trolltech.com/main-snapshot/ ... apper.html
in Kombination mit einem QSql(Relational)TableModel.
Wer bietet mehr?
Was willst du denn nehmen, wenn der Designer eh XML ausspuckt?NoRulez hat geschrieben:@solarix: Ich meinte es nur eben ohne XML, mir schwebt da eine art application server/n-tier vor, bei dem ich am client die gui basteln kann und die gui dann am server gespeichert wird.
Ein (OS-abhängiges) binary/dll willst du doch da sicher nicht drinnen haben...
Oder wie wolltest du dir die UIs zusammen bauen?
Wenn du nicht die Qt-Bordmittel verwenden willst (designer + QUiLoader), musst du dir da was selber schreiben. Ein Dateiformat (Binär oder Text), eine Klasse bzw. auch mehrere zum schreiben und lesen der Datein, wobei das lesen dir ein QWidget liefert. Aber das wird eher komplizierter, drum solltest du schauen, wie du den Designer in dein Konzept integriert bekommst.
Du kannst dir ja überlegen, dass die UIs nur in einem bestimmten Verzeichnis gespeichert werden dürfen. Dieses Verzeichnis überwachst du mit einem QFileSystemWatcher. Auf Änderungen in dem Dir reagierst du entsprechend (ui am Server hochladen/aktualisieren/löschen).
Du kannst die bereits existierenden UIs auflisten, und für bearbeiten/löschen/neu erstellen gibts nen Button, der dir dann gleich mit dem passenden UI den Designer startet (QProcess::startDetached() z.B.).
Weil VARCHAR lange Zeit auf 255 Zeichen beschraenkt war und auch TEXT erst seit neueren MySQL-Versionen (und davon reden wir hier vermutlich) existiert, wuerde ich BLOB bevorzugen.. ausserdem kann es mir damit egal sein, wie die Datei aufgebaut ist.. da lese ich einfach mit readAll ein QByteArray ein und schmeiss diesen in die DB... fertigfranzf hat geschrieben:Nimmt man da nicht besser VARCHAR (bzw. TEXT/CLOB)?
BLOB ist doch binär (Binary Large Object), z.B. haut man da Bilder rein.
Jaja.. ich habe dich schon richtig verstanden.. nur kann ich deinen Posts noch nicht so richtig die konkrete Frage entnehmen.. Dass du ein UserInterface nicht nur aus einer Datei sondern auch aus einer Datenbank laden kannst, duerfte beantwortet sein.NoRulez hat geschrieben: Ich meinte es nur eben ohne XML, mir schwebt da eine art application server/n-tier vor, bei dem ich am client die gui basteln kann und die gui dann am server gespeichert wird.
Wenn ich dich aber richtig verstehe, liegt dein Problem eher darin, die Daten dorthin zu bekommen... und genau da wird's knifflig. Ich habe mich auch mal damit beschaeftigt und bin zum gleichen Schluss wie franzf gekommen. Am einfachsten ist es, den Designer (das Programm, nicht den Code) in die eigene Applikation einzubinden. Meine Applikation speichert den Datenbankinhalt in eine temporaere Datei startet den Designer. Sobald die temporaeren Daten aendern speichere ich sie automatisch wieder zurueck in die DB... nicht sehr elegant, aber funktional.
-
androphinx
- Beiträge: 170
- Registriert: 26. Januar 2009 09:19
- Wohnort: 127.0.0.2
Ich habe mal eine ganz andere Frage an den Anfang zu stellen: Willst du einfach nur den Inhalt der XML-Datei hochladen (da könnte man auch etwas anderes als einen Datenbankserver nehmen
) oder willst du wirklich Element für Element einzeln mit seinen Eigenschaften in der Datenbank speichern. Ich weiß jetzt im Moment noch nicht, was das ganze für einen Sinn machen soll, vielleicht solltest du den genauen Sinn und Hintergrund deines Projektes mal erläutern...
Mfg androphinx
Mfg androphinx
Also es soll eine art application server werden, bei dem ich die GUI elemente in einer DB habe. Beim Laden hole ich mir mittels SQL Statements die verschiedenen elemente und baue so dynamisch meine GUI inkl. signals und slots auf. Hinter den slots liegen dann SQL Statements, die die beispielsweise ComboBox usw. mit Werten fühlen. Auf der anderen seite soll der client also ein mehr oder weniger dumme exe sein, die dynamisch vom server die GUI lädt. Somit rolle ich einmal das exe und ev. die DLL aus und verändere beispielsweise am server die GUI und alle ~ 50 Benutzer oder mehr sehen das selbe.
Als Beispiel bzw. Vorbild wäre Remedy gewesen.
LG NoRulez
Als Beispiel bzw. Vorbild wäre Remedy gewesen.
LG NoRulez
Jep.. genau so machen wir's bei uns (GUI-Beschreibung in die Datenbank, Logik in Form von Plugins) .. ich habe nur noch nicht begriffen, was dir an der XML-Beschreibung (am UI-Format von Trolltech) nicht gefällt (warum denn was selbst erfinden, wenn es schon was fertiges gibt?)auf der anderen seite soll der client also ein mehr oder weniger dumme exe sein, die dynamisch vom server die GUI lädt. Somit rolle ich einmal das exe und ev. die DLL aus und verändere beispielsweise am server die GUI und alle ~ 50 Benutzer oder mehr sehen das selbe.
Wie ich den Designer eingebunden habe um die UI zu modifizieren, habe ich bereits geschrieben (Daten in tmp-Datei schreiben, designer starten, designer beenden, tmp-Datei wieder in DB eintragen).Und wie binde ich dann den designer [..] in die GUI mit ein?
Da erntest du unweigerlich die typische "das-kommt-drauf-an..."-Antwort...Und wie [...] signal slots in die GUI...? Damit beispielsweise ein Admin neue funktionalität hinzufügen kann udgl.?
Schliesslich befindest du dich in der C++-Welt mit den diversen Binaries (Programm, Libraries, Plugins) welche gewissen Einschränkungen unterliegen und du uns nicht sagst, wie umfangreich deine "neue funktionalität" sein soll...
Einige Szenarien:
1. Qt-Plugins: die Applikation bietet spezifische Qt-Plugins,welche dann in der GUI nur noch konfiguriert werden müssen. Beispiel: diverse Datenbank-Plugins (auf Basis von QLineEdit, QCheckBox, QWidgetView & co), so dass ein "Admin" jederzeit Quellen und Attribute einer DB-Anwendung im Designer konfigurieren kann)
2. QtScript: Die Programmlogik wird in der Qt-eigenen Scriptsprache direkt in die UI eingetragen (also im Designer). Hier würde also UI+Logik im Designer erstellt und in die DB eingetragen. Da gibt's IMHO ein Taschenrechner-Beispiel...
3. GUI komplett in Script: Der komplette Code wird gescriptet.. man könnte ja auch PyQt nehmen und den Python-Code in die DB ablegen..
Das einzige was ich nicht tun würde, ist neben der UI auch noch das passende (plattformabhängige) Plugin in die DB einzutragen...
hth...
Vorerst mal recht herzlichen Dank,
ich werde mich mal intensiver damit beschäftigen und die Implementierung nochmals genauer durchgehen/überlegen.
LG NoRulez
P.S.: Es war wie folgt gedacht, dass ich in einem TreeView meine GUI Elemente und somit die GUI Designe, danach soll mittels eines GraphicsView die slots grafisch dargestellt werden und konfiguriert werden => SIGNAL -> Holen der Daten/Benutzerereigniss auswerten/... -> SLOT
EDIT: Die logik soll nicht kompiliert werden sondern beispielsweise dynamisch aus dateien/Datenbanken kommen vermutlich reine Python/Perl/BASH skripte und anderen applikationen
ich werde mich mal intensiver damit beschäftigen und die Implementierung nochmals genauer durchgehen/überlegen.
LG NoRulez
P.S.: Es war wie folgt gedacht, dass ich in einem TreeView meine GUI Elemente und somit die GUI Designe, danach soll mittels eines GraphicsView die slots grafisch dargestellt werden und konfiguriert werden => SIGNAL -> Holen der Daten/Benutzerereigniss auswerten/... -> SLOT
EDIT: Die logik soll nicht kompiliert werden sondern beispielsweise dynamisch aus dateien/Datenbanken kommen vermutlich reine Python/Perl/BASH skripte und anderen applikationen