Labels werden nicht mehr aktualisiert!?

Alles rund um die Programmierung mit Qt
Antworten
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

Labels werden nicht mehr aktualisiert!?

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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...
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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
Phorx
Beiträge: 29
Registriert: 21. Mai 2009 22:36
Kontaktdaten:

Beitrag 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!
Antworten