von doubleSpinBox nach lineEdit mit Hash

Alles rund um die Programmierung mit Qt
Antworten
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

von doubleSpinBox nach lineEdit mit Hash

Beitrag 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
Hmm mir fällt nichts ein ^^
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag 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]
Hmm mir fällt nichts ein ^^
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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 ;))
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag 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
Hmm mir fällt nichts ein ^^
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Dann poste mal bitte Zeilen 60-90.
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag 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 ;	
};
Hmm mir fällt nichts ein ^^
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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().
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hallo,

also _hash habe ich so in der h-Datei:

Code: Alles auswählen

 protected:
		QHash<QString, QLineEdit *> _hash;
Hmm mir fällt nichts ein ^^
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

nici hat geschrieben:hallo,

also _hash habe ich so in der h-Datei:

Code: Alles auswählen

 protected:
		QHash<QString, QLineEdit *> _hash;
Dann solltest du die Typen bei den Iteratoren auch genau(!) so angeben.
Also

Code: Alles auswählen

QHash<QString, QLineEdit *>::iterator i;
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag 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.
Hmm mir fällt nichts ein ^^
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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. (Ich hoffe das Komma zwischen deinen beiden insert steht nicht wirklich so im Quelltext, das geht auch nicht...)
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag 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
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag 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$
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

ok es geht jetzt, vielen dannkkkkk.

lg

nici
Hmm mir fällt nichts ein ^^
Antworten