Seite 1 von 1

Labels werden nicht mehr aktualisiert!?

Verfasst: 7. Juni 2009 22:50
von Phorx
Findet hier jemand einen Grund warum nach dem ersten Mal die Labels labelxd und labelyd nicht aktualisiert bzw neu beschriftet werden? Die Daten die er einlesen soll sind aufjedenfall unterschiedlich. Das streckenLabel wird jedes mal (wie gewollt) akutalisiert - also kanns ja wahrscheinlich nicht am connect liegen...

Ich hoffe die Informationen reichen :roll: ansonsten bitte bescheid sagen was noch nützlich wäre.

Code: Alles auswählen

void MindRacer::changeStrecke()
{
	
	QFile file(fileName);

	if(!file.open(QIODevice::ReadOnly))
	{
		QMessageBox::information(this, "Datei konnte nicht geöffnet werden", file.errorString());
		return;
	}

	for(int x=0;x != (ui.streckenBox->currentIndex()+1);x++)
	{
		if(x == ui.streckenBox->currentIndex())
		{
			bool ok;
			QString line = file.readLine();
			file.close();
			QStringList data = line.split(";");
			str.x1 = data[1].toInt(&ok, 10);
			if (ok == false)
				return;
			str.x2 = data[2].toInt(&ok, 10);
			if (ok == false)
				return;
			str.y1 = data[3].toInt(&ok, 10);
			if (ok == false)
				return;
			str.y2 = data[4].toInt(&ok, 10);
			if (ok == false)
				return;
			data.clear();
			line.clear();
		}
	}
	int xdif = (str.x2 - str.x1);
	int ydif = (str.y2 - str.y1);
//////////////////////////////////////////////////////////////////////////

	ui.labelxd->setText(QString::number(xdif, 10));
	ui.labelyd->setText(QString::number(ydif, 10));

//////////////////////////////////////////////////////////////////////////
	ui.streckenLabel->setText(ui.streckenBox->currentText());
}
str ist eine Struct mit int x1,x2,y1,y2

Verfasst: 8. Juni 2009 01:16
von franzf
Was ist die tiefere Logik hinter diesem Konstrukt?

Code: Alles auswählen

for(int x=0;x != (ui.streckenBox->currentIndex()+1);x++) 
   { 
      if(x == ui.streckenBox->currentIndex()) 
      {
         code();
      }
   }
Da kannst du dir doch gleich die ganze Schleife schenken, wenn dich eh nur der currentIndex() interessiert...

Verfasst: 8. Juni 2009 13:00
von solarix
Da kannst du dir doch gleich die ganze Schleife schenken, wenn dich eh nur der currentIndex() interessiert...
Er interessiert sich nicht einmal für diesen :wink: .. weder "x" oder "currentIndex()" kommen im If-Block vor. Im Übrigen sind auch noch "line.clear()", "data.clear()" und auch "file.close()" überflüssig (alles lokale Variabeln mit begrenzter Lebensdauer)
Findet hier jemand einen Grund warum nach dem ersten Mal die Labels labelxd und labelyd nicht aktualisiert bzw neu beschriftet werden?
Das findest du ganz leicht selbst heraus, in dem du einfach alle Annahmen verifizierst. Entweder mit einem Debugger oder mittels "qDebug()". Einige Beispiele:

Code: Alles auswählen

   QFile file(fileName);

   if(!file.open(QIODevice::ReadOnly))
   {
      QMessageBox::information(this, "Datei konnte nicht geöffnet werden", file.errorString());
      return;
   }
   QString line = file.readLine();      
   QStringList data = line.split(";"); 
   Q_ASSERT(data.count() > 5); // anderfalls Crash
   qDebug() << data;
  
   ...

   int xdif = (str.x2 - str.x1);
   int ydif = (str.y2 - str.y1); 
   qDebug() << xdif  << str.x2 << str.x1 << ydif  << str.y2 << str.y1;

   ...

[EDIT]
Weil der Text der Combobox ändert würde ich vermuten, dass die erste Zeile in "fileName" halt immer die gleichen Daten enthaelt.. daraus ergaebe sich der Schluss, dass du "readLine()" eigentlich _vor_ dem if ausfuehren wolltest, nicht _im_ if

Verfasst: 8. Juni 2009 15:40
von Phorx
- verdammt - :lol: Du hast Recht mit deiner Vermutung das ich readline ausserhalb der if schleife haben wollte ...

Vielen Dank für eure Hilfe!