Seite 1 von 2

Werte aus Datei DoubleSpinBox übergeben??

Verfasst: 28. November 2008 15:09
von nici
hallo,

(da bin ich wieder ^^). Kann ich Werte aus einer Datei lesen und die dann den DoubleSpinBoxes übergeben??

ich weiss wie ich eine Datei öffnen kann.

Code: Alles auswählen

void TabZwei::open(){
	
	QString fileName = QFileDialog::getOpenFileName(this, "Open File", "/home",("Datei(*.txt *.dat *.odt *. )"));
 	if(!fileName.isEmpty()){
 	QFile file (fileName);
 	file.open(QIODevice::ReadOnly);
 	QDataStream in(&file);
 	in.setVersion(QDataStream::Qt_4_0);
 	}	
};

lg

nici

Verfasst: 1. Dezember 2008 07:35
von AuE
siehe doku spinnboxes

Verfasst: 1. Dezember 2008 11:08
von nici
in der doku hab ich nur valueFromText() gefunden, aber ob das das richtige ist glaub ich nicht, und wie ich es benutzen müsste, wüsste ich auch nicht. Ich guck mal bei den Examples.

lg

nici

Verfasst: 1. Dezember 2008 11:13
von AuE
jepp

Verfasst: 2. Dezember 2008 16:34
von nici
so ich habe jetzt herausgefunden, dass ich mit QSettings arbeiten muss. Ich habe mir bereits eine NSettings angelegt.

NSettings.cpp

Code: Alles auswählen

#include "NSettings.h"
#include <QDebug>

NSettings :: NSettings(const QString & fileName, QObject * parent): 
	QSettings(fileName, QSettings::IniFormat){
		
		setFallbacksEnabled(false);
}

NSettings::~NSettings() {
	sync();	
}

double NSettings::readDouble(const QString & key){
	return value(key).toDouble();
}
und die NSettings.h

Code: Alles auswählen

#ifndef NSETTINGS_H
#define NSETTINGS_H

#include <QSettings>

class NSettings : public QSettings {
	
	Q_OBJECT
	
	public:
	    NSettings(const QString &,  QObject * = 0);
		virtual ~NSettings();
		virtual double readDouble(const QString &);
	
	private:
		NSettings(const NSettings &);
		NSettings & operator=(const NSettings &);
};
#endif 
includiert habe ich sie in der TabZwei.cpp

Code: Alles auswählen

#include <QtGui>
#include "TabZwei.h"
#include "NSettings.h"
#include "NSettings.h"


TabZwei::TabZwei(QWidget *parent) 
		:QWidget(parent)
{
		setupUi(this);	
		
		connect(loadFilePB, SIGNAL(clicked()),
			this, SLOT(open()));
		connect(saveDataPB, SIGNAL(clicked()),
			this, SLOT(saveData()));
		
		_list << "C1" << "C3" << "C5" << "C7" << "B2x" << "B2y" << "B4x" << "B4y" << "B6x" << "B6y"
		 << "S3x" << "S3y" << "S5x" << "S5y" << "S7x" << "S7y" << "D4x" << "D4y" << "D6x" << "D6y" 
		 << "R5x" << "R5y" << "R7x" << "R7y" << "F6x" << "F6y" << "G7x" << "G7y" << "A1x" << "A1y" 
		 << "A2x" << "A2y" << "A3x" << "A3y" << "A4x" << "A4y" << "A5x" << "A5y" << "A6x" << "A6y" << "A7x" << "A7y";  
			
		
	_hash.insert("C1", doubleSpinBox_C1);
	_hash.insert("C3", doubleSpinBox_C3);
	_hash.insert("C5", doubleSpinBox_C5);
	_hash.insert("C7", doubleSpinBox_C7);
	
	_hash.insert("B2x", doubleSpinBox_B2x), _hash.insert("B2y", doubleSpinBox_B2y);
	_hash.insert("B4x", doubleSpinBox_B4x),	_hash.insert("B4y", doubleSpinBox_B4y);
	_hash.insert("B6x", doubleSpinBox_B6x), _hash.insert("B6y", doubleSpinBox_B6y);
	_hash.insert("S3x", doubleSpinBox_S3x), _hash.insert("S3y", doubleSpinBox_S3y);
	_hash.insert("S5x", doubleSpinBox_S5x), _hash.insert("S5y", doubleSpinBox_S5y);
	_hash.insert("S7x", doubleSpinBox_S7x), _hash.insert("S7y", doubleSpinBox_S7y);	
	_hash.insert("D4x", doubleSpinBox_D4x), _hash.insert("D4y", doubleSpinBox_D4y);
	_hash.insert("D6x", doubleSpinBox_D6x), _hash.insert("D6y", doubleSpinBox_D6y);
	_hash.insert("R5x", doubleSpinBox_R5x), _hash.insert("R5y", doubleSpinBox_R5y);
	_hash.insert("R7x", doubleSpinBox_R7x), _hash.insert("R7y", doubleSpinBox_R7y);
	_hash.insert("F6x", doubleSpinBox_F6x), _hash.insert("F6y", doubleSpinBox_F6y);
	_hash.insert("G7x", doubleSpinBox_G7x), _hash.insert("G7y", doubleSpinBox_G7y);
	_hash.insert("A1x", doubleSpinBox_A1x), _hash.insert("A1y", doubleSpinBox_A1y);
	_hash.insert("A2x", doubleSpinBox_A2x), _hash.insert("A2y", doubleSpinBox_A2y);
	_hash.insert("A3x", doubleSpinBox_A3x), _hash.insert("A3y", doubleSpinBox_A3y);
	_hash.insert("A4x", doubleSpinBox_A4x), _hash.insert("A4y", doubleSpinBox_A4y);
	_hash.insert("A5x", doubleSpinBox_A5x), _hash.insert("A5y", doubleSpinBox_A5y);
	_hash.insert("A6x", doubleSpinBox_A6x), _hash.insert("A6y", doubleSpinBox_A6y);
	_hash.insert("A7x", doubleSpinBox_A7x), _hash.insert("A7y", doubleSpinBox_A7y);				
}	

void TabZwei::open(){
	//filedialog 
	//QString fileName
	//NSettings n(fileName,this);
	//_hash.value("C1")->setValue(n.readDouble("C1"));
	
	
	QString fileName = QFileDialog::getOpenFileName(this, "Open File", "/home", ("Datei(*.ini *.txt *.dat *.odt)"));
	NSettings n(fileName, this);
	for(double i = 0; i < _list.size(); ++i){
		_hash.value(i)->setValue(n.readDouble(i));		
	}
}

void TabZwei::saveData(){
	
	//
	double d;
	d = (_hash.value("C1"))->value();
	qDebug() << d;
	d++;
	_hash.value("C1")->setValue(d);
Jetzt kommt eine Fehlermeldung, die ich zwar verstehe (naja die eine zumidest) aber nicht weiss, wie ich ihn beheben soll.

Fehlermeldung

Code: Alles auswählen

TabZwei.cpp: In member function 'void TabZwei::open()':
TabZwei.cpp:70: error: no matching function for call to 'QHash<QString, QDoubleSpinBox*>::value(double&)'
/usr/include/qt4/QtCore/qhash.h:544: note: candidates are: const T QHash<Key, T>::value(const Key&) const [with Key = QString, T = QDoubleSpinBox*]
/usr/include/qt4/QtCore/qhash.h:555: note:                 const T QHash<Key, T>::value(const Key&, const T&) const [with Key = QString, T = QDoubleSpinBox*]
TabZwei.cpp:70: error: no matching function for call to 'NSettings::readDouble(double&)'
NSettings.h:13: note: candidates are: virtual double NSettings::readDouble(const QString&, const double&)
make: *** [TabZwei.o] Fehler 1

vlt habt ihr auch noch Verbesserungsvorschläge für mich, das ganze übersichtlicher zu machen und kürzer ^^, danke.

lg

nici

Verfasst: 3. Dezember 2008 09:00
von pfid
Also wenn du möchtest, dass einer von uns dein Programm für dich programmiert, solltest du vielleicht einen entsprechenden Thread erstellen :)

Verfasst: 3. Dezember 2008 09:42
von AuE
rofl

Verfasst: 3. Dezember 2008 11:20
von nici
ohh man. Könnt ihr nicht wenigstens so tun als ob ihr helfen wollt?

Verfasst: 3. Dezember 2008 11:34
von pfid
nici hat geschrieben:ohh man. Könnt ihr nicht wenigstens so tun als ob ihr helfen wollt?
Wir kauen mit dir schon seit Tagen die Entwicklung deines Programms durch, und du lässt dir jedes Stückchen Code von uns sagen. Meinst du nicht, dass das nicht so ganz der Sinn der Sache ist?

Verfasst: 3. Dezember 2008 11:35
von AuE
wie man in eine qhash schreibt steht in der doku, der rest is cpp grundlagen

dir fehlen echt noch ne menge an grundlagen. falls du diesen beruflichen weg gerne weitergehen möchtest musst du an diesen sachen arbeiten.

aber um dir ne kleine hilfe zu geben.... welchen datentyp erwartet denn deine readdouble und was gibst du ihr?

Verfasst: 3. Dezember 2008 11:42
von nici
mein readDouble erwartet einen key (bei mir ist es der Name des Felde z.B. C1) und geben dann den Werte davon (in Double) zurück. Und ich gebe ihr ja eine Liste.

Verfasst: 3. Dezember 2008 11:46
von AuE
lern cpp

Code: Alles auswählen

for(double i = 0; i < _list.size(); ++i){ 
      _hash.value(i)->setValue(n.readDouble(i));    

aber selbst wenn du das gefixt hast wirst du zm nächsten problem kommen.... wetten? ich sehs schon jetz.... :D

Verfasst: 3. Dezember 2008 12:04
von nici
ach man seid ihr gemein, ich hab halt noch nicht so viel Programmiererfahrung, die muss ich ja erst sammeln. Ihr hattet doch auch nicht alles super perfekt nach 3 Wochen drauf, oder (oder doch??). Ich mein würdest du jetzt zu BioChemie wechseln, dann musstest du auch erst mal viele Infos sammeln und verstehen wie du die Infos anwenden kannst.

Verfasst: 3. Dezember 2008 12:10
von AuE
deswegen lernt man im grundstudium auch erstmal bio und chemie um reinzukommen. genauso isses auch beim proggen. man kann nicht anfangen qt zu coden ohne cpp drauf zu haben. man kann ja schließlich auch nicht cpp proggen ohne cpp zu beherrschen.

mein tip: nimm dir den cpp wochenendcrashkurs und ein we zeit. es wird sonst einfach nix sorry. wir helfen dir gerne kein ding- nur nicht wenns ganz ganz primitive dinger sind-die meisten von uns hier verdienen damit kohle und ja... wenn man da wirklich von grund auf beginnen muss oder sieht das es wirklich anfängerfehler sind .... ja da werden meine aw´s scho mal patzig. sorry hierfür. nur wir sind keine lehrer. schau doch mal im cpp forum nach tutorials usw.

ach ja und nei ich hatte das sicher nicht nach 3 wochen drauf. das is sicher nen ding was nach und nachkommt desto mehr man macht. nur was bringt es dir wenn wir dir alles lösen? nix. geh online, lies doku und lös die probleme selbst(jedenfalls die elementaren). dadurch lernst was-nicht wenn wir dir was vorkauen. sicher mache ich auch fehler beim proggen. das is doch net so als hättest es hier mit halbgöttern zu tun.

Verfasst: 3. Dezember 2008 12:14
von nici
ich mach ja neben her ein Tutorial, ich glaub du hattest es mir sogar vorgeschlagen. Ich steh halt unter Zeitdruck. Aber du hast recht, ich will das ja so machen, dass ich es auch verstehe und richtig anwenden kann.

lg

nici