Liste mit Qobjects

Alles rund um die Programmierung mit Qt
Antworten
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Liste mit Qobjects

Beitrag von Chri »

Hi
Habe eine lange Liste von lineedits etc., deren Werte aus einer Datenbank geholt werden sollen und auch wieder in die Datenbank zurückgeschrieben werden sollen. Mit Querry-Abfragen.
Da es viele sind:
Habe die lineedits etc. in eine Liste gepackt:
QList <QObject *> elements {ui->lineEdit_blower, ui->radioButton, ui->lineEdit_wrg, ...
Und die Spaltenbezeichnungen der Datenbank in eine QStringList

Daraus wollte ich schleifenmäßig die Querrys zum Auslesen bzw. Rückspeichern bilden.
Soweit komm ich jedoch gar nicht: Sobald ich auf ein "elements" zugreifen will, stürzt das Programm ab.
Auch bei z.B.: QString zzz = elements[0]->objectName() stürzt es ab.

Warum?

LG
Chri
Die Sprache des Technikers ist die Skizze
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Liste mit Qobjects

Beitrag von Christian81 »

Ohne kompilierfähigen (kurzen) Code ist das schwer zu sagen - eventuell ist ui->lineEdit_blower nicht initialisert.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Re: Liste mit Qobjects

Beitrag von Chri »

Danke für die Rückmeldung, lineedits etc. sind definiert.
Nachdem sogar ui->lineEdit_blower->settext("shit") zum Absturz geführt hat, habe ich eine neue Designer-Formularklasse erstellt, in die ui alles reinkopiert und auch den weiteren Code kopiert:
Jetzt funktioniert es, nichts stürzt ab. Werd ich wohl als eines der seltsamen Dinge abhacken.

Allerdings eine neue Frage:
Ich will in die Objekte aus der Liste schreiben, elements-> settext() gibt es jedoch nicht.
(Das Objekt gibt es, elements->objectName() liefert den richtigen Namen)
Wie geht das?


LG
Chri
Die Sprache des Technikers ist die Skizze
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Liste mit Qobjects

Beitrag von Christian81 »

Da in der Liste QObject - Pointer stehen, es setText() aber nur in der abgeleiteten Klasse QLineEdit gibt würde ich ein dynamic_cast vorschlagen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Re: Liste mit Qobjects

Beitrag von Chri »

Ja, das hat funktioniert: dynamic_cast<QLineEdit*>(elements);
Jedoch hab ich in der Liste verschiedene Typen: RadioButton, Combobox, doubleSpinBox
Für manche brauch ich settext, für andere setvalue,....

Zuerst wollte ich differieren mit Hilfe von:
elements->metaObject()->className()

Nun habe ich eine Lösung ohne dynamic_cast gefunden:
elements->setProperty(....) und da das true/false zurückgibt, habe ich die verschiedenen properties in if-Abfragen verschachtelt:

if(elements->setProperty("currentIndex",1)) //COMBO gibt true bei currentIndex
{}
else
{
elements->dynamicPropertyNames().empty();
if(elements->setProperty("value",1)) //SPIN gibt true bei value
{}
else
......

Oder geht es besser/einfacher?

LG
Chri
Die Sprache des Technikers ist die Skizze
Chri
Beiträge: 100
Registriert: 23. Juni 2017 12:32

Re: Liste mit Qobjects

Beitrag von Chri »

So, nachdem der vorherige Weg im Detail doch hackelig war, bin ich wieder zu
dynamic_cast<QLineEdit*>(elements);
zurückgekehrt
und
habe eine Qstringlist mit den Typen angelegt und eruiere so den Typ:
typen << "QDoubleSpinBox" << "QRadioButton" << "QLineEdit" << "QCheckBox" << "QComboBox";
int typnr = typen.QStringList::indexOf(elements->metaObject()->className()) ;

Je nach Typ, verschiedene Abfragen:
switch (typnr)
{
case 0:
dynamic_cast<QDoubleSpinBox*>(elements)->setValue(mod_LT->value(0).toDouble());
break;
case 1:
dynamic_cast<QRadioButton*>(elements)->setChecked(mod_LT->value(0).toInt());
break;
....

LG Chri
Die Sprache des Technikers ist die Skizze
Antworten