Zum Inhalt springen

[QT] Problem mit XML-TextNode als Labeltext


Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...