FinalFantasy Geschrieben 3. Juli 2006 Geschrieben 3. Juli 2006 In einem XML-File sind Texte für eine Checkliste hinterlegt, die in einem QT-Programm mittels QLabels ausgegeben werden sollen. <?xml version="1.0" encoding="utf-8"?> <checklist> <headline>Checkliste</headline> <check>Check1</check> <check>Check2</check> </checklist> [/PHP] Dieser Code liest die XML-Datei: [PHP] QDomDocument m_doc; QFile file(FILE); if (file.open(QIODevice::ReadOnly)) { QByteArray content = file.readAll(); file.close(); //m_doc = new QDomDocument("checklist"); if (m_doc.setContent(content)) { ParseFile(m_doc); } else { QMessageBox::information(this, "Fehler", QString(FILE) + " konnte nicht gelesen werden", QMessageBox::Ok); } } else { QMessageBox::information(this, "Fehler", QString(FILE) + " konnte nicht geöffnet werden", QMessageBox::Ok); } void iDesignerStep1::ParseFile(QDomDocument m_doc) { QVBoxLayout* layout = new QVBoxLayout; QDomElement docElem = m_doc.documentElement(); QDomNode n = docElem.firstChild(); while(!n.isNull()) { QDomElement e = n.toElement(); if(e.nodeName().compare("check") == 0) { QLabel* l = new QLabel; l->setWordWrap(true); l->setText(e.firstChild().nodeValue()); //alternative l->setText(e.text()); //aber sowas geht: l->setText("TestText"); layout->addWidget(l); } n = n.nextSibling(); } layout->addStretch(1); setLayout(layout); } Wenn ich die Texte aus dem XML-File an die Labels zuweise, stürzt das Programm beim beenden im Desktruktor des Labels ab, und zwar genauer in der Funktion _CrtIsValidHeapPointer(const void * pUserData)... also irgendwo wird auf einen ungültigen Speicherbereich zugegriffen. Schreibe ich jedoch direkt irgendeinen Text in das Label, funktioniert das. Ich habe auch schon probiert, den Text aus dem XML vorher in einen anderen String zu kopieren, aber egal was ich mache, sobald der Text aus dem XML kommt, stürzt das Programm beim beenden ab. Jemand ne Idee woran das liegen könnte? Ich hab leider noch nicht viel Erfahrung mit QT. Zitieren
FinalFantasy Geschrieben 4. Juli 2006 Autor Geschrieben 4. Juli 2006 Ich habe jetzt eine Lösung gefunden, verstehe aber leider das Problem nicht ganz. Anscheinend hängt es mit der Formatierung des QStrings zusammen. l->setText(e.firstChild().nodeValue().toAscii()); funktioniert nämlich. Wo werden die Informationen für die Formatierung hergeholt, im XML-File ist ja auch alles Plain-Text?! Und warum stürzt der Destructor des QStrings ab, sollte dieser eine Formatierung enthalten? Zitieren
Klotzkopp Geschrieben 4. Juli 2006 Geschrieben 4. Juli 2006 Wo werden die Informationen für die Formatierung hergeholt, im XML-File ist ja auch alles Plain-Text?! QLabel versucht beim Setzen des Textes, das Format zu erkennen. Offenbar läuft dabei etwas schief. Es sollte auch klappen, wenn du das Textformat des Labels vorher auf Qt::PlainText setzt. Zitieren
FinalFantasy Geschrieben 7. Juli 2006 Autor Geschrieben 7. Juli 2006 Jetzt habe ich schon wieder ein ähnliches Problem: Ich will ein QDomDocument speichern, bzw. den Inhalt als String haben. Ich habs mit dom.save(...) und dom.toString() und dom.toByteArray() probiert, aber sobald ich eine Methode aufrufe, stürzt mir das Programm im Destructor des entsprechenden QStrings ab (selbe Stelle wie im ersten Posting), in den ich die Daten gespeichert habe. Selbst die Zeile QMessageBox::information(0,"debug", xml.toString(), QMessageBox::Ok); führt zu einem Absturz... Nur eben nicht diese Zeile selber, sondern wenn am Funktionsende der Destruktor von QString aufgerufen wird. Warum? Zitieren
Klotzkopp Geschrieben 7. Juli 2006 Geschrieben 7. Juli 2006 Wie sieht denn dieser Absturz genau aus? Bekommst du eine Fehlermeldung? Hast du möglicherweise Qt und dein Programm mit unterschiedlichen Versionen der C-Laufzeitumgebung verlinkt? Zitieren
FinalFantasy Geschrieben 7. Juli 2006 Autor Geschrieben 7. Juli 2006 Die Fehlermeldung hab ich mal angehängt. Unterschiedliche Laufzeitbibliotheken denk ich mal können es nicht sein. Ich benutze QT Commercial 4.1.4 mit Visual Studio 2005. Es sind auch keine anderen QT Versionen und auch keine anderen IDEs installiert. Zitieren
Klotzkopp Geschrieben 7. Juli 2006 Geschrieben 7. Juli 2006 Unterschiedliche Laufzeitbibliotheken denk ich mal können es nicht sein.Der Fehler deutet aber darauf hin. Welche C-Laufzeitbibliothek linkt dein Programm denn? Zitieren
FinalFantasy Geschrieben 7. Juli 2006 Autor Geschrieben 7. Juli 2006 Der Fehler deutet aber darauf hin. Welche C-Laufzeitbibliothek linkt dein Programm denn? Wie kann ich das gezielt nachschaun? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.