Alle Xtp files einlesen

Alles rund um die Programmierung mit Qt
Antworten
js
Beiträge: 59
Registriert: 4. Juli 2011 21:29

Alle Xtp files einlesen

Beitrag von js »

Hi wollte einen code geschreiben mit dem ich jede xtp file von diesem Format in einem QTreeWidget ausgeben kann:
Beispiel:
<Ordner1>
<Ordner2>
<Ordner3>
</Ordner3>
</Ordner2>
</Ordner1>

bekomme einen Zugriffsfehler wenn ich za auf 9 erhöhe

Code: Alles auswählen

int hauptordner;
za=8;
int kinder=0;
for(hauptordner=2;hauptordner<za;hauptordner++){
u.textEdit->insertPlainText(QString::number(hauptordner));
	// Hauptordner
zeile[hauptordner].replace( QRegExp("<"),"");
zeile[hauptordner].replace( QRegExp(">"),"");
zeile[hauptordner].replace( QRegExp(" "),"");
QString test =zeile[hauptordner];

qtree[hauptordner] = new QTreeWidgetItem(u.treeWidgetneu);
qtree[hauptordner] = u.treeWidgetneu->topLevelItem(hauptordner-2);
qtree[hauptordner]->setText(0, QApplication::translate("Dialog", test.toAscii(), 0, QApplication::UnicodeUTF8));

	// Suche nach Child
for(int unterordner=hauptordner+1;unterordner<za;unterordner++){
	//u.textEdit->insertPlainText(QString::number(unterordner));
	if(zeile[unterordner+1].indexOf("/"+test)!=-1){/*u.textEdit->insertPlainText("Gefunden");*/hauptordner=unterordner;break;}
	else{
//suche nach unterunterordne
		for(int unterunterordner=unterordner+1;unterunterordner<za;unterunterordner++){
			
			
		zeile[unterordner].replace( QRegExp("<"),"");
		zeile[unterordner].replace( QRegExp(">"),"");
		zeile[unterordner].replace( QRegExp(" "),"");
	if(zeile[unterunterordner].indexOf("/"+zeile[unterordner])!=-1){/*u.textEdit->insertPlainText("Gefunden^unterordner");*/ unterordner=unterunterordner;break;}
	else{qtree[unterunterordner] = new QTreeWidgetItem(qtree[hauptordner]);
		 qtree[unterunterordner] = qtree[hauptordner]->child(kinder);kinder++;
		 qtree[unterunterordner]->setText(0,zeile[unterunterordner]);
		 unterordner=unterunterordner;}}
		hauptordner=unterordner;
	}	 
} 
 	//u.textEdit->insertPlainText(QString::number(hauptordner));
	//hauptordner=unterordner;

}
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Alle Xtp files einlesen

Beitrag von franzf »

Prinzipiell bitte IMMER die Fehlermeldung mitposten! "Zugriffsfehler" können überall entstehen.

Was ist qtree? Was ist zeile? Meine Vermutung ist, dass das Arrays sind, deren Größe zu klein ist. Wo und wie werden in deklariert und initialisiert?
js
Beiträge: 59
Registriert: 4. Juli 2011 21:29

Re: Alle Xtp files einlesen

Beitrag von js »

Entschuldige bitte die fehlenden Informationen sind...

Zeile ist :

Code: Alles auswählen

int za=0;
QString zeile[5000];
 QFile daten(opxtp.toAscii());
 daten.open(QIODevice::ReadWrite);
   QTextStream in(&daten);      
         while (!in.atEnd()) {
            zeile[za] = in.readLine();
			za++;
			//daten.close();
         }
daten.close();

qtree ist ':

Code: Alles auswählen

QTreeWidgetItem *qtree[5000];
Und der Fehler :

Unbehandelte Ausnahme bei 0x657072e9 (QtGuid4.dll) in tpopt.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.

> QtGuid4.dll!QTreeWidgetItem::setText(int column=0, const QString & atext="/Offline") Zeile 227 + 0x49 Bytes C++
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Alle Xtp files einlesen

Beitrag von franzf »

Ähm, ja...
Was macht das?

Code: Alles auswählen

qtree[hauptordner] = new QTreeWidgetItem(u.treeWidgetneu);
qtree[hauptordner] = u.treeWidgetneu->topLevelItem(hauptordner-2);
qtree[hauptordner]->setText(0, QApplication::translate("Dialog", test.toAscii(), 0, QApplication::UnicodeUTF8));
Was soll die zweite Zeile machen? Warum diese Neuzuweisung?
Das sagt die Doku zu QTreeWidget::topLevelItem:
Returns the top level item at the given index, or 0 if the item does not exist.
Der zweite Teil des Satzes interessiert dich, weil wohl genau das bei dir passiert.
Was kannst du dagegen tun? Überlegen, ob du das da oben wirklich genau so haben willst, wenn ja prüfen ob topLevelItem !NULL zurückgibt.

In der dritten Zeile kommt dann der SegFault, aus der Fehlermeldung siehst du dass es in der QTreeWidgetItem::setText passiert.

// sry, wenn manche Buchstaben fehlen, ich kauf nie mehr Tastaturen mit Laptop-Anschlag...
js
Beiträge: 59
Registriert: 4. Juli 2011 21:29

Re: Alle Xtp files einlesen

Beitrag von js »

naja mit diesem Code erstelle ich ein neues Item ( alles was drunter kommt ist für das child )

Vereinfacht schaut das so aus

Code: Alles auswählen

qtree[hauptordner] = new QTreeWidgetItem(u.treeWidgetneu);
qtree[hauptordner] = u.treeWidgetneu->topLevelItem(0);
qtree[hauptordner]->setText(0, "Ordner1");

qtree[hauptordner] = new QTreeWidgetItem(u.treeWidgetneu);
qtree[hauptordner] = u.treeWidgetneu->topLevelItem(1);
qtree[hauptordner]->setText(0, "Ordner2");
und so weiter
damit möchte ich die Hauptordner erstellen.

oder aber auch das dort der fehler ist denke es müßte vielleicht so lauten...werde es heute abend mal testen.

qtree[hauptordner] = new QTreeWidgetItem(u.treeWidgetneu);
qtree[hauptordner] = u.treeWidgetneu->topLevelItem(ordner);
qtree[hauptordner]->setText(0, "Ordner2");
ordner++;
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Alle Xtp files einlesen

Beitrag von Christian81 »

Und was ist wenn mehr als 5000 Zeilen drin sind? In C++ gibt es nicht umsonst Container.
Was soll das .toAscii()? Das ist falsch - wirst Du spätestens bei Dateien mit non-ASCII-Zeichen sehen.
Das Du ein neues Item erstellst sehen wir - aber warum denn die doppelte Zuweisung? Hast Du überprüft ob 'u.treeWidgetneu->topLevelItem(0);' NULL zurückliefert oder nicht?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
js
Beiträge: 59
Registriert: 4. Juli 2011 21:29

Re: Alle Xtp files einlesen

Beitrag von js »

@Christian81

danke, habe es jetzt angepasst. ( bis auf die 5000 zeilen, bis jetzt sind es nicht mehr passe es später an)
Zitat : Hast Du überprüft ob 'u.treeWidgetneu->topLevelItem(0);' NULL zurückliefert
jap , nein tut er nicht.

Habe // qtree[unterunterordner]->setText(0,zeile[2]);

rausgenommen ich glaube dort liegt der Fehler. Wei0 nur nicht warum



Code: Alles auswählen


int hauptordner;
za=5;
int kinder=0;
int ordner=0;
for(hauptordner=2;hauptordner<za;hauptordner++){
u.textEdit->insertPlainText(QString::number(hauptordner));
	// Hauptordner
zeile[hauptordner].replace( QRegExp("<"),"");
zeile[hauptordner].replace( QRegExp(">"),"");
zeile[hauptordner].replace( QRegExp(" "),"");

if(u.treeWidgetneu->topLevelItem(ordner)==NULL){u.textEdit->setText("Fehler");}
qtree[hauptordner] = u.treeWidgetneu->topLevelItem(ordner);
qtree[hauptordner]->setText(0,zeile[hauptordner]);
ordner++;

	// Suche nach Child
for(int unterordner=hauptordner;unterordner<za;unterordner++){
	//u.textEdit->insertPlainText(QString::number(unterordner));
	if(zeile[unterordner+1].indexOf("/"+zeile[hauptordner])!=-1){/*u.textEdit->insertPlainText("Gefunden");*/hauptordner=unterordner;break;}
	else{
//suche nach unterunterordne
		for(int unterunterordner=unterordner+1;unterunterordner<za;unterunterordner++){
			
			
		zeile[unterordner].replace( QRegExp("<"),"");
		zeile[unterordner].replace( QRegExp(">"),"");
		zeile[unterordner].replace( QRegExp(" "),"");
	if(zeile[unterunterordner].indexOf("/"+zeile[unterordner])!=-1){/*u.textEdit->insertPlainText("Gefunden^unterordner");*/ unterordner=unterunterordner;break;}
	else{
		 qtree[unterunterordner] = qtree[hauptordner]->child(kinder);kinder++;
		// u.textEdit->insertPlainText(QString::number(unterunterordner));
		// qtree[unterunterordner]->setText(0,zeile[2]);
		 unterordner=unterunterordner;}}
		hauptordner=unterordner;
	}
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Alle Xtp files einlesen

Beitrag von Christian81 »

Dann nimm einen Debugger und schau wo genau er crasht.
"replace( QRegExp("<"),"");" ist auch etwas zu viel des Guten... ein einfaches remove('<') ist wesentlich effizienter.
Den ganzen Sinn der Zeilen habe ich noch nicht verstanden. Warum zeile[2] - ich mein - was steht dort genau drin? Gibt es keine sinnvollere Datenstruktur?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
js
Beiträge: 59
Registriert: 4. Juli 2011 21:29

Re: Alle Xtp files einlesen

Beitrag von js »

So habe alles bis in eine ebene vereinfacht.
Läuft soweit.

Jedoch muß ich
qtree[hauptordner] = new QTreeWidgetItem(u.treeWidgetneu);
und

qtree[unterordner] = new QTreeWidgetItem(qtree[hauptordner]);

benutzen da es sonnst nicht geht. Anscheinend erstellt er nur so ein neues Item.

Code: Alles auswählen

int hauptordner;
za=17;

int ordner=0;
for(hauptordner=2;hauptordner<za;hauptordner++){
//u.textEdit->insertPlainText(QString::number(hauptordner));
	// Hauptordner
zeile[hauptordner].replace( QRegExp("<"),"");
zeile[hauptordner].replace( QRegExp(">"),"");
zeile[hauptordner].replace( QRegExp(" "),"");

//if(u.treeWidgetneu->topLevelItem(ordner)==NULL){u.textEdit->setText("Fehler");}
qtree[hauptordner] = new QTreeWidgetItem(u.treeWidgetneu);
qtree[hauptordner] = u.treeWidgetneu->topLevelItem(ordner);
qtree[hauptordner]->setText(0,zeile[hauptordner]);
ordner++;

	// Suche nach Child
int kinder=0;
for(int unterordner=hauptordner+1;unterordner<za;unterordner++){
	if(zeile[unterordner].indexOf("/"+zeile[hauptordner])!=-1){u.textEdit->insertPlainText("Gefunden");break;}
	else{
		 qtree[unterordner] = new QTreeWidgetItem(qtree[hauptordner]);
		 qtree[unterordner] = qtree[hauptordner]->child(kinder);kinder++;
		// u.textEdit->insertPlainText(QString::number(unterordner));
		 qtree[unterordner]->setText(0,zeile[unterordner]);
	}}hauptordner=unterordner; 
}	 
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Alle Xtp files einlesen

Beitrag von franzf »

js hat geschrieben:Jedoch muß ich
qtree[hauptordner] = new QTreeWidgetItem(u.treeWidgetneu);
und

qtree[unterordner] = new QTreeWidgetItem(qtree[hauptordner]);

benutzen da es sonnst nicht geht. Anscheinend erstellt er nur so ein neues Item.
Natürlich erstellt er ohne der zweiten Zeile ein Toplevel-Item, würde dir ein kleiner Test auch zeigen. Willst du ein Sub-Item, brauchst einen anderen Konstruktor.

Der Code ist irgendwie Chaos pur. Fängt bei den Schleifen an:
hauptordner = 2, unterordner=3 bis 17. hauptordner++
-> hauptordner=3 -> qtree[3], vormals ein "unterordner" wird jetzt ein "hauptordner" -> überschrieben.

Weshalb speicherst du eigentlich die ganzen Daten in einem riesigen QString-Array? Wieso speicherst du die ganzen TreeWidgetItems (wo du sie doch sowieso überschreibst)? Vor allem passt die Abbildung nicht so ganz: du brichst einen (dynamisch erweiterbaren) Baum auf ein eindimensionales Array herunter. Wenn die Daten statisch sind, kann das schon gehen - aus einem File gelesen sind sie es aber höchstwahrscheinlich nicht!

Entweder brauchst du die Daten unabhängig von der View, dann leg sie aber GEORDNET in einer eigenen Datenstruktur an, und nicht in einem doofen Array. Oder du brauchst sie nicht extra, dann leg statt den Strings beim Parsen deiner Xtp-Files gleich ordentliche QTreeWidgetItems an (ohne die in einem eigenen Array zu speichern - tut doch QTreeWidget schon).
Wenn du dann eh schon eine eigene Struktur hast, ist der Weg über ein eigenes Model um einiges handlicher.

Du solltest wirklich versuchen, zu verstehen was hinter deinen ganzen Kostrukten steckt. Eigentlich solltest du VOR dem Programmieren überlegen, was du erreichen willst, und entsprechend deinen Code gestalten. Wild irgendwelche Items anlegen, Zeilen hinzufügen oder entfernen, geht nicht gut. Halt trial&error. Und das "funktionierende Resultat" hat ja immer noch seine Macken.
Geh halt nochmal ganz einfach ran, schreib dir ein Beispielprogramm, in dem du selber ein QTreeWidget erstellst (keine Daten einlesen), und daran dann die einzelnen Konstruktoren und anderen Methoden ausprobierst (z.B. auch was passiert, wenn du dir ein Item an einer ungültigen Stelle holen willst, das veränderst und nicht auf NULL prüfst).
js
Beiträge: 59
Registriert: 4. Juli 2011 21:29

Re: Alle Xtp files einlesen

Beitrag von js »

@franzf
1.Vielen Dank das du dich mit meinem code beschäftig hast und danke für deinen Ratschlag
Nun zum Text:
Zitat : // Der Code ist irgendwie Chaos pur. Fängt bei den Schleifen an: //
Der Code läuft und macht genau das was er machen soll. Ist zwar noch nicht perfekt kann durch Verbesserungsvorschläge nur lernen.
Zitat : // Weshalb speicherst du eigentlich die ganzen Daten in einem riesigen QString-Array? //
Das hat den Grund das ich später um wieder auf genau diesen Ordner und seinen Parent zuzugreifen ich seine array position verwende. Hatte noch einen anderen Grund bin mir nicht mehr ganz genau sicher…
Zitat : // Daten statisch sind, kann das schon gehen //
Das sind sie tatsächlich, das einzige was sich ändert sind die Werte aber die Position bleibt gleich.
Zitat : // Wenn du dann eh schon eine eigene Struktur hast, ist der Weg über ein eigenes Model um einiges handlicher. //
Werde ich bei Gelegenheit versuchen umzusetzen
Zitat : // Wild irgendwelche Items anlegen, Zeilen hinzufügen oder entfernen, geht nicht gut. Halt trial&error. //
Da braucht man nicht drum rum reden, da hast du recht.

Nun zum Code. Also das mit dem anderen Konstruktor und der Neuzuweisung verstehe ich noch nicht ganz.
Aber mich gerade mehr Interessiert, er erstellt nun einen Baum bis in die 4 Unterebene.
Code…
Erstelle Ordner
(wenn Unterordner gefunden){
Schleife{Erstelle Ordner
(wenn Unterordner gefunden){
Schleife {Erstelle Ordner
}}}}
Und so weiter. Grüble gerade wie ich es bewerkstelligen kann alles in einer schleife zu packen..

Code: Alles auswählen

QString zeile[5000];
 QFile daten(opxtp.toAscii());
 daten.open(QIODevice::ReadWrite);
   QTextStream in(&daten);      
         while (!in.atEnd()) {
				zeile[za] = in.readLine();
				za++;
			//daten.close();
         }
daten.close();


int hauptordner;


int ordner=0;
for(hauptordner=2;hauptordner<za;hauptordner++){
//u.textEdit->insertPlainText(QString::number(hauptordner));
	// Hauptordner

qtree[hauptordner] = new QTreeWidgetItem(u.treeWidgetneu);
qtree[hauptordner] = u.treeWidgetneu->topLevelItem(ordner);
qtree[hauptordner]->setText(0,zeile[hauptordner].remove("<").remove(">").remove(" "));
ordner++;

	// Suche nach Child
int kinder=0;
for(int unterordner=hauptordner+1;unterordner<za;unterordner++){

	if(zeile[unterordner].indexOf("!--")!=-1){
		 qtree[unterordner-1]->setText(2,zeile[unterordner]);unterordner++;}

	if(zeile[unterordner].remove(" ").indexOf("<",3)!=-1){
		qtree[unterordner] = new QTreeWidgetItem(qtree[hauptordner]);
		qtree[unterordner] = qtree[hauptordner]->child(kinder);kinder++;
QString varia=zeile[unterordner].section("/", 0, 0);
QString altername=zeile[unterordner].section("/", 1, 1);
		qtree[unterordner]->setText(1,varia.remove(" ").remove(altername).remove("<"));
		qtree[unterordner]->setText(0,altername.remove(" ").remove(">"));}
	else{
	if(zeile[unterordner].remove("<").remove(">").remove(" ").indexOf("/"+zeile[hauptordner])!=-1){/*u.textEdit->insertPlainText("Gefunden");*/break;}
	else{
		 qtree[unterordner] = new QTreeWidgetItem(qtree[hauptordner]);
		 qtree[unterordner] = qtree[hauptordner]->child(kinder);kinder++;
		 qtree[unterordner]->setText(0,zeile[unterordner].remove("<").remove(">").remove(" "));
// Suche nach Child von Child Anfang 
int kinder2=0;

for(int unterordner2=unterordner+1;unterordner2<za;unterordner2++){

	if(zeile[unterordner2].remove("<").remove(">").remove(" ").indexOf("!--")!=-1){
		 qtree[unterordner2-1]->setText(2,zeile[unterordner2].remove("<").remove(">").remove(" "));unterordner2++;}


	if(zeile[unterordner2].remove(" ").indexOf("<",3)!=-1){
		//u.textEdit->setText(zeile[unterordner]);
		qtree[unterordner2] = new QTreeWidgetItem(qtree[unterordner]);
		 qtree[unterordner2] = qtree[unterordner]->child(kinder2);kinder2++;
QString varia2=zeile[unterordner2].section("/", 0, 0);
QString altername2=zeile[unterordner2].section("/", 1, 1);
		qtree[unterordner2]->setText(1,varia2.remove(" ").remove(altername2).remove("<"));
		qtree[unterordner2]->setText(0,altername2.remove(" ").remove(">"));}
	else{
	if(zeile[unterordner2].remove("<").remove(">").remove(" ").indexOf("/"+zeile[unterordner].remove("<").remove(">").remove(" "))!=-1){/*u.textEdit->insertPlainText("Gefunden2");*/break;}
	else{
		 qtree[unterordner2] = new QTreeWidgetItem(qtree[unterordner]);
		 qtree[unterordner2] = qtree[unterordner]->child(kinder2);kinder2++;
		 qtree[unterordner2]->setText(0,zeile[unterordner2].remove("<").remove(">").remove(" "));

// Suche nach Child von Child von Child Anfang
int kinder3=0;

for(int unterordner3=unterordner2+1;unterordner3<za;unterordner3++){
	//u.textEdit->insertPlainText(zeile[unterordner2-1]);

		if(zeile[unterordner3].remove(" ").indexOf("!--")!=-1){
		 qtree[unterordner3-1]->setText(2,zeile[unterordner3].remove(" "));unterordner3++;}	

	if(zeile[unterordner3].remove(" ").indexOf("<",3)!=-1){
		//u.textEdit->setText(zeile[unterordner]);
		qtree[unterordner3] = new QTreeWidgetItem(qtree[unterordner2]);
		 qtree[unterordner3] = qtree[unterordner2]->child(kinder3);kinder3++;
QString varia3=zeile[unterordner3].section("/", 0, 0);
QString altername3=zeile[unterordner3].section("/", 1, 1);
		qtree[unterordner3]->setText(1,varia3.remove(" ").remove(altername3).remove("<"));
		qtree[unterordner3]->setText(0,altername3.remove(" ").remove(">"));}
	else{
	if(zeile[unterordner3].indexOf("/"+zeile[unterordner2].remove(" "))!=-1){/*u.textEdit->insertPlainText("Gefunden3");*/break;}
	else{
		 qtree[unterordner3] = new QTreeWidgetItem(qtree[unterordner2]);
		 qtree[unterordner3] = qtree[unterordner2]->child(kinder3);kinder3++;
		 qtree[unterordner3]->setText(0,zeile[unterordner3].remove("<").remove(">").remove(" ").remove(" "));

// Suche nach Child von Child von Child von Child Anfang
int kinder4=0;

for(int unterordner4=unterordner3+1;unterordner4<za;unterordner4++){
		if(zeile[unterordner4].remove(" ").indexOf("!--")!=-1){
		 qtree[unterordner4-1]->setText(2,zeile[unterordner4].remove(" "));unterordner4++;}	

	if(zeile[unterordner4].remove(" ").indexOf("<",3)!=-1){
		qtree[unterordner4] = new QTreeWidgetItem(qtree[unterordner3]);
		 qtree[unterordner4] = qtree[unterordner3]->child(kinder4);kinder4++;
QString varia4=zeile[unterordner4].section("/", 0, 0);
QString altername4=zeile[unterordner4].section("/", 1, 1);
		qtree[unterordner4]->setText(1,varia4.remove(" ").remove(altername4).remove("<"));
		qtree[unterordner4]->setText(0,altername4.remove(" ").remove(">"));}
	else{
	if(zeile[unterordner4].indexOf("/"+zeile[unterordner3].remove(" "))!=-1){/*u.textEdit->insertPlainText("Gefunden4");*/break;}
	else{
		 qtree[unterordner4] = new QTreeWidgetItem(qtree[unterordner3]);
		 qtree[unterordner4] = qtree[unterordner3]->child(kinder4);kinder4++;
		 qtree[unterordner4]->setText(0,zeile[unterordner3].remove("<").remove(">").remove(" ").remove(" "));
	}}}unterordner3=unterordner4;
// Suche nach Child von Child von Child von Child Ende

	}}}unterordner2=unterordner3;
// Suche nach Child von Child von Child Ende

	}}}unterordner=unterordner2;
// Suche nach Child von Child Ende

	}}}hauptordner=unterordner; 
}	 
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Alle Xtp files einlesen

Beitrag von franzf »

Baum einlesen und die einzelnen Nodes (Verzeichnisse/Dateien/...) über Indizes ansprechenbleibt aber eine Frickellösung. Du programmierstC++, das kann objektorientiert! Hier bietet sich doch eine Baumstruktur an:

Code: Alles auswählen

struct Dir;
struct File {
    QStringList data;
    Dir *parent;
};
struct Dir {
    QList<File> files;
};
o.Ä. So speichert ein Dir alle Files, das File speichert die Daten und kann auf den parent zugreifen.


Du solltest dann auch gleich beim Einlesen parsen. Die ganze Datei durchlaufen, die Zeilen in ein Array schreiben, dann nochmal das ganze Array durchlaufen und per RegExp ändern usw. ist mMn. nicht sehr elegenat.
Beim Dateieinlesen gleich die Daten parsen und die Struktur einfügen ist doch problemlos möglich, oder? So kannst du bei evtl. auftretenden Dateifehlern (soll ja mal vorkommen können, oder?) mit einer perfekten Fehlermeldung (was? wo?) aufwarten.
js
Beiträge: 59
Registriert: 4. Juli 2011 21:29

Re: Alle Xtp files einlesen

Beitrag von js »

ne ganz dumme Frage.

if(qtreewidgetitem[6]!=NULL){qtreewidgetitem[6]->text(0);}

wenn es nicht exestiert dürfte doch eigentlich nichts passieren ?
Antworten