Seite 1 von 1
von doubleSpinBox nach lineEdit mit Hash
Verfasst: 4. Februar 2009 14:29
von nici
hallo, ich möchte mit der Hash-fkt eine Reihe von LineEdits durchlaufen. doch leider klappt es nicht ganz. Ich hatte vorher doubleSpinBoxes drin, doch die soll ich durch lineEdits ersetzten. Kann mir bitte jmd helfen.
Code: Alles auswählen
while(it.hasNext()) {
it.next() ;
//qDebug() << "Key \"" << it.key() << "\": insert value "
//<< n.readDouble(it.key()) << endl ;
it.value()->setText(n.readDouble(QString::QString(_sectionAberrations).append(it.key()))) ;
}
lg
nici
Verfasst: 4. Februar 2009 14:43
von franzf
"mit der Hash-fkt" bedeutet, dass du einen QHash verwedest, in dem deine LineEdits liegen? und it ist eine QHashIterator?
Und was klappt denn nicht so ganz?
Kompiliert es nicht?
QHashIterator ist im Übrigen ein "Java style const Iterator", was bedeutet, dass die value()s nicht verändert werden können, somit das setText() nicht klappen wird (da hakt es wohl, oder?)
Dann verwende doch einfach einen QHash::iterator.
Da klappt halt kein it.next(), dafür ein it++.
Grüße
Franz
Verfasst: 4. Februar 2009 14:54
von nici
ja setText klappt nicht: meinst du das mit dem Iterator so:
Code: Alles auswählen
[code]QHash<QString, int>::iterator i;
for (i = hash.begin(); i != hash.end(); ++i)
cout << i.key() << ": " << i.value() << endl;
[/code]
Verfasst: 4. Februar 2009 14:56
von franzf
nici hat geschrieben:ja setText klappt nicht: meinst du das mit dem Iterator so:
Code: Alles auswählen
[code]QHash<QString, int>::iterator i;
for (i = hash.begin(); i != hash.end(); ++i)
cout << i.key() << ": " << i.value() << endl;
[/code]
Hast du es denn versucht zu kompilieren?
(Ja ich hab es so gemeint, aber kompilieren musst du es schon

)
Verfasst: 4. Februar 2009 15:17
von nici
ähm ja ich hab es versucht aber es kommen Fehlermeldungen
Tabzwei.cpp: In member function 'void TabZwei::open()':
Tabzwei.cpp:64: error: no match for 'operator=' in 'i = ((TabZwei*)this)->TabZwei::_hash. QHash<Key, T>::begin [with Key = QString, T = QLineEdit*]()'
/usr/include/qt4/QtCore/qhash.h:267: note: candidates are: QHash<QString, int>::iterator& QHash<QString, int>::iterator::operator=(const QHash<QString, int>::iterator&)
/usr/include/qt4/QtCore/qhash.h:326: error: 'QHash<Key, T>::iterator::operator bool() const [with Key = QString, T = int]' is private
Tabzwei.cpp:64: error: within this context
/usr/include/qt4/QtCore/qhash.h:326: error: 'QHash<Key, T>::iterator::operator bool() const [with Key = QString, T = QLineEdit*]' is private
Tabzwei.cpp:64: error: within this context
Tabzwei.cpp:65: error: 'cout' was not declared in this scope
Tabzwei.cpp: In member function 'void TabZwei::saveData()':
Tabzwei.cpp:81: error: no matching function for call to 'QHashIterator<QString, QDoubleSpinBox*>::QHashIterator(QHash<QString, QLineEdit*>&)'
/usr/include/qt4/QtCore/qhash.h:873: note: candidates are: QHashIterator<Key, T>::QHashIterator(const QHash<Key, T>&) [with Key = QString, T = QDoubleSpinBox*]
/usr/include/qt4/QtCore/qhash.h:873: note: QHashIterator<QString, QDoubleSpinBox*>::QHashIterator(const QHashIterator<QString, QDoubleSpinBox*>&)
make: *** [Tabzwei.o] Fehler 1
Verfasst: 4. Februar 2009 15:22
von franzf
Dann poste mal bitte Zeilen 60-90.
Verfasst: 4. Februar 2009 15:25
von nici
Code: Alles auswählen
void TabZwei::open(){
QString fileName = QFileDialog::getOpenFileName(this, "Open File", "/home/nurc/QtOrdner/QtAufgNeu", ("Datei(*.ini *.txt *.dat *.odt)"));
qDebug() << "Filename: " << fileName << endl ;
NSettings n(fileName, this);
if (!fileName.length()) return;
qDebug() << "Status: " << static_cast<int>(n.status()) << endl ;
qDebug() << "All keys: " << n.allKeys() << endl ;
QHash<QString, int>::iterator i;
for (i = _hash.begin(); i != _hash.end(); ++i)
cout << i.key() << ": " << i.value() << endl;
double apertureAngle=n.readDouble(QString::QString(_sectionParameters).append(_idApertureAngle));
apertureAngleLE->setText(QString::number(apertureAngle));
double highTension=n.readDouble(QString::QString(_sectionParameters).append(_idhighTension));
highTensionLE->setText(QString::number(highTension));
}
void TabZwei::saveData(){
QString fileName = QFileDialog::getSaveFileName(this, "Open File", "/home", ("Datei(*.ini *.txt *.dat *.odt)"));
qDebug() << "Filename: " << fileName << endl ;
NSettings n(fileName, this);
qDebug() << "Status: " << static_cast<int>(n.status()) << endl ;
QHashIterator<QString , QDoubleSpinBox * > it(_hash) ;
while(it.hasNext()) {
it.next() ;
qDebug() << "Key \"" << it.key() << "\": read value "
<< n.readDouble(it.key()) << endl ;
n.setValue(QString::QString(_sectionAberrations).append(it.key()), it.value()->value()) ;
}
bool ok=false;
double apertureAngle = apertureAngleLE->text().toDouble(&ok);
if(ok) {
n.setValue(QString::QString(_sectionParameters).append(_idApertureAngle), apertureAngle) ;
}
else {
showConvError(apertureAngleLE->text(), QString("1"));
qDebug()<< "Apertur Winkel ist falsch";
}
double highTension= highTensionLE->text().toDouble(&ok);
if(ok){
n.setValue(QString::QString(_sectionParameters).append(_idhighTension), highTension);
}else {
showConvError(highTensionLE->text(), QString("3"));
qDebug()<< "Energie ist falsch";
}
n.sync() ;
qDebug() << "All keys: " << n.allKeys() << endl ;
};
Verfasst: 4. Februar 2009 15:32
von franzf
Wie ist "_hash" definiert?
Denn du schreibst:
Code: Alles auswählen
QHash<QString, int>::iterator i;
for (i = _hash.begin(); i != _hash.end(); ++i)
und später:
Code: Alles auswählen
QHashIterator<QString , QDoubleSpinBox * > it(_hash) ;
Aber eigentlich wolltest du doch QDoubleSpinBox durch QLineEdit ersetzen?
Und außerdem hättest du an zweiter Stelle den QHashIterator gegen einen QHash::iterator austauschen sollen, wegen dem setText().
Verfasst: 4. Februar 2009 15:37
von nici
hallo,
also _hash habe ich so in der h-Datei:
Verfasst: 4. Februar 2009 15:41
von franzf
nici hat geschrieben:hallo,
also _hash habe ich so in der h-Datei:
Dann solltest du die Typen bei den Iteratoren auch genau(!) so angeben.
Also
Verfasst: 4. Februar 2009 15:50
von nici
und was ist mit
Code: Alles auswählen
_hash.insert("C5", lineEdit_C5), _hash.insert("C7", lineEdit_C7);
muss ich daraus
Code: Alles auswählen
i.insert("C1", lineEdit_C1);
i.insert("C3", lineEdit_C3);
machen, aber dann funktioniert insert nicht.
Verfasst: 4. Februar 2009 15:55
von franzf
nici hat geschrieben:und was ist mit
Code: Alles auswählen
_hash.insert("C5", lineEdit_C5), _hash.insert("C7", lineEdit_C7);
muss ich daraus
Code: Alles auswählen
i.insert("C1", lineEdit_C1);
i.insert("C3", lineEdit_C3);
machen, aber dann funktioniert insert nicht.
Nein!
Der iterator ist dazu da, die Elemente des Hash abzuklappern, insert um in das hash einzufügen.
Darum musst du natürlich weiterhin _hash.insert(); ausführen.

ch hoffe das Komma zwischen deinen beiden insert steht nicht wirklich so im Quelltext, das geht auch nicht...)
Verfasst: 4. Februar 2009 16:04
von nici
jep stimmt,
ne das Komma ist im Code nicht so. ^^
Es kommen aber immer noch viele Fehlermeldungen die ich nicht verstehe.
Tabzwei.o Tabzwei.cpp
Tabzwei.cpp:107: error: 'apertureAngleLE' was not declared in this scope
Tabzwei.cpp:108: error: expected unqualified-id before 'if'
Tabzwei.cpp:111: error: expected unqualified-id before 'else'
Tabzwei.cpp:115: error: 'highTensionLE' was not declared in this scope
Tabzwei.cpp:116: error: expected unqualified-id before 'if'
Tabzwei.cpp:118: error: expected unqualified-id before 'else'
Tabzwei.cpp:122: error: expected constructor, destructor, or type conversion before '.' token
Tabzwei.cpp:123: error: expected constructor, destructor, or type conversion before '<<' token
Tabzwei.cpp:124: error: expected declaration before '}' token
make: *** [Tabzwei.o] Fehler 1
Verfasst: 4. Februar 2009 16:13
von nici
ahh ok, das war alles ein Klammerungsfehler ^^, aber ich bekomme ein problem mit den Libraries
/QtOrdner/qtAufgNeu/AufgLineEdit$ ./AufgLineEdit
./AufgLineEdit: error while loading shared libraries: libcstools.so: cannot open shared object file: No such file or directory
nurc@praktikum:~/QtOrdner/qtAufgNeu/AufgLineEdit$
Verfasst: 4. Februar 2009 16:18
von nici
ok es geht jetzt, vielen dannkkkkk.
lg
nici