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
Liste mit Qobjects
Liste mit Qobjects
Die Sprache des Technikers ist die Skizze
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Liste mit Qobjects
Ohne kompilierfähigen (kurzen) Code ist das schwer zu sagen - eventuell ist ui->lineEdit_blower nicht initialisert.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Liste mit Qobjects
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
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
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Liste mit Qobjects
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
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
Re: Liste mit Qobjects
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
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