Fehler in QTableView?

Alles rund um die Programmierung mit Qt
Antworten
Guenther Schardinger
Beiträge: 6
Registriert: 2. Mai 2009 17:34
Wohnort: A8793, Trofaiach

Fehler in QTableView?

Beitrag von Guenther Schardinger »

Bitte um Hilfe!

Ich bin dabei mich in Qt4.5 und Qt-Creator 1.0.0 einzuarbeiten. Bin begeistert vom Qt-Konzept, und der Qt-Creator funktioniert sehr gut. Die Dokumentation ist sehr gut.

Bei Vorarbeiten für ein Midi-Projekt, habe Bytes in ein QByteArrays eingelesen. Für die Hex-Anzeige habe ich eine QTableView verwendet. Funktioniert alles sofort ganz einwandfrei.

Nun das sonderbare Problem:

* Beim Anzeigen der Bytes in Grossbuchstaben, werden einzelne Werte ausgelassen.
* Der Fehler tritt nur bei grösseren Datenmengen auf.
* Die fehlenden Werte sind vom Typ 0x?D.
* Mit kleinen Buchstaben funktioniert alles wieder einwandfrei.

Ich habe versucht, den Fehler systematische einzugrenzen. Leider ohne Erfolg.

Das Programm liegt auf: http://members.aon.at/schardinger/qt/

Danke im voraus.

Servus, Guenther
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Re: Fehler in QTableView?

Beitrag von neuschi »

Guenther Schardinger hat geschrieben:Bitte um Hilfe!


* Beim Anzeigen der Bytes in Grossbuchstaben, werden einzelne Werte ausgelassen.
* Der Fehler tritt nur bei grösseren Datenmengen auf.
* Die fehlenden Werte sind vom Typ 0x?D.
* Mit kleinen Buchstaben funktioniert alles wieder einwandfrei.

Ich habe versucht, den Fehler systematische einzugrenzen. Leider ohne Erfolg.
Ich habe mir das Programm mal runtergeladen und hier scheint es problemlos zu funktionieren (Windows Vista, Qt 4.5)
Gib mal ein paar Informationen zu deiner Umgebung. Linux? Windows?
Was bedeutet "werden ausgelassen"? Fehlen die ganz oder wird stattdessen eine leere Zelle ausgegeben?!

\Ralf
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

@neuschi:
Qt-Projekt MidiEdit:
Erstellt mit Qt 4.5, Qt Creator 1.0.0, Linux Debian 5.0 (2.6.26-1-686)

@Günther:

Hast du dichg schon mal rein gedebugt? Was fehlen die Werte im Array? Kommst du bei diesen Daten überhaupt in die Schleife/ if Bedingung rein?

Ansonsten sollte es eig gehn. Schöner wäre noch ein

Code: Alles auswählen

return QVariant(s);
Guenther Schardinger
Beiträge: 6
Registriert: 2. Mai 2009 17:34
Wohnort: A8793, Trofaiach

Re: Fehler in QTableView?

Beitrag von Guenther Schardinger »

Gib mal ein paar Informationen zu deiner Umgebung. Linux? Windows?

Erstellt mit Qt 4.5, Qt Creator 1.0.0, Linux Debian 5.0 (2.6.26-1-686)

Was bedeutet "werden ausgelassen"? Fehlen die ganz oder wird stattdessen eine leere Zelle ausgegeben?!

Nein, einzelne Zellen bleiben einfach leer.
Guenther Schardinger
Beiträge: 6
Registriert: 2. Mai 2009 17:34
Wohnort: A8793, Trofaiach

Beitrag von Guenther Schardinger »

AuE hat geschrieben:@neuschi:
Qt-Projekt MidiEdit:
Erstellt mit Qt 4.5, Qt Creator 1.0.0, Linux Debian 5.0 (2.6.26-1-686)

@Günther:

Hast du dichg schon mal rein gedebugt? Was fehlen die Werte im Array? Kommst du bei diesen Daten überhaupt in die Schleife/ if Bedingung rein?

Ansonsten sollte es eig gehn. Schöner wäre noch ein

Code: Alles auswählen

return QVariant(s);
Die Bytes sind sicher im Array, das habe ich sehr genau getestet.
In der Anzeige fehlen sie. Nur sehr wenige.
Guenther Schardinger
Beiträge: 6
Registriert: 2. Mai 2009 17:34
Wohnort: A8793, Trofaiach

Re: Fehler in QTableView?

Beitrag von Guenther Schardinger »

neuschi hat geschrieben:
Guenther Schardinger hat geschrieben:Bitte um Hilfe!


* Beim Anzeigen der Bytes in Grossbuchstaben, werden einzelne Werte ausgelassen.
* Der Fehler tritt nur bei grösseren Datenmengen auf.
* Die fehlenden Werte sind vom Typ 0x?D.
* Mit kleinen Buchstaben funktioniert alles wieder einwandfrei.

Ich habe versucht, den Fehler systematische einzugrenzen. Leider ohne Erfolg.
Ich habe mir das Programm mal runtergeladen und hier scheint es problemlos zu funktionieren (Windows Vista, Qt 4.5)
Gib mal ein paar Informationen zu deiner Umgebung. Linux? Windows?
Was bedeutet "werden ausgelassen"? Fehlen die ganz oder wird stattdessen eine leere Zelle ausgegeben?!

\Ralf
Hast du auch die Ausgabe in Grossbuchstaben mit
return s.toUpper();
getestet?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich geh' jetzt mal davon aus, daß die Daten wegen zu kleiner Spaltenbreite nicht angezeigt werden. Aber Screenshot kann das sicher klären...
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

QByteArray

Beitrag von softwaremaker »

Warum ist s vom Typ QByteArray ?

Code: Alles auswählen

QByteArray s(QByteArray::number((unsigned char) Daten->at(i),16));
Sollte da nicht QString stehen? Denn die Rückgabe in QVariant soll doch sicher vom Typ QString sein.
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Re: Fehler in QTableView?

Beitrag von neuschi »

Guenther Schardinger hat geschrieben:
Hast du auch die Ausgabe in Grossbuchstaben mit
return s.toUpper();
getestet?
Aber sicher. Hier (unter Windows) keine Probleme.
Mach mal bitte einen Screenshot wenn das Problem auftritt und versuche es 100%ig zu reproduzieren.
Wenn du das *.jpg einliest, tritt der Fehler dann bei dir auf?

\Ralf
Guenther Schardinger
Beiträge: 6
Registriert: 2. Mai 2009 17:34
Wohnort: A8793, Trofaiach

Beitrag von Guenther Schardinger »

upsala hat geschrieben:Ich geh' jetzt mal davon aus, daß die Daten wegen zu kleiner Spaltenbreite nicht angezeigt werden. Aber Screenshot kann das sicher klären...
Danke!! Das war die Lösung. Damit ist die Welt wieder in Ordnung :-) .

Ich habe mit
tableView->resizeColumnsToContents();
die Spaltenbreite aktualisiert. Damit war es für mich erledigt. Es hat aber beim verwendeten Zeichensatz offensichtlich nicht immer funktioniert.

Das erklärt auch, dass der Fehler eher bei der Ausgabe von Bytes vom '?D' vorkam. 'D' ist einfach sehr breit. Ich habe aber eher an 0x0D (carrige return) gedacht.

Vielen Danke für eure Hilfe, ihr ward super!!

PS: Ich hoffe euch auch helfen zu können.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

bei mir läufts auch super.....

probier doch mal das aus....

Code: Alles auswählen

if (QString::compare(s.toUpper(), s, Qt::CaseInsensitive) != 0 )
                qDebug() << "Error 1\n";
btw:

das geht übrigens auch

Code: Alles auswählen

QByteArray::number(n, 16).toUpper();  // returns "3F"
Antworten