Seite 1 von 1
Liste mit Qobjects
Verfasst: 30. Oktober 2017 17:29
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
Re: Liste mit Qobjects
Verfasst: 31. Oktober 2017 16:10
von Christian81
Ohne kompilierfähigen (kurzen) Code ist das schwer zu sagen - eventuell ist ui->lineEdit_blower nicht initialisert.
Re: Liste mit Qobjects
Verfasst: 7. November 2017 14:06
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
Re: Liste mit Qobjects
Verfasst: 10. November 2017 16:48
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.
Re: Liste mit Qobjects
Verfasst: 15. November 2017 15:34
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
Re: Liste mit Qobjects
Verfasst: 15. November 2017 19:40
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