Ich habe für mein neuestes Projekt (kommt später, kommt später...) aus Faulheit beschlossen, mir das GUI von einem Framework zusammenkleben zu lassen. Qt gefiel mir ganz gut. Ich habe auch - dank CSS, was einer der Gründe für meine Wahl war - schon schnell einen großen Fortschritt bei der Umsetzung meines GUI-Entwurfs (wie gesagt: kommt später, kommt später...) gemacht, seit gestern ist zumindest der grafische Teil fertig. Jetzt geht's allerdings darum, dieses GUI auch zu befüllen.
Das Konzept meines Projekts ist es im Wesentlichen, eine XML-Datei in ein Objekt namens file auszulesen und ihren Inhalt teilweise auf die QLabel im Programm zu verteilen. Dafür habe ich eine Funktion namens parseXML teilweise gebaut, teilweise aus dem Netz übernommen, die die relevanten Knoteninhalte in einzelne private QStrings speichert, zum Beispiel qsAppName (mit Gettern und Settern). Das klappt auch ganz gut, aber auslesen kann ich es dann nicht mehr so leicht - beim Versuch, setText anzuwenden, schmiert es einfach ab.
Die relevanten Codeteile:
Code: Alles auswählen
void MyXMLFile::init(QString fileName /* = "defaultfile*/)
{
// ... read XML file and save the settings into the private vars ...
// this is repeated until we have a valid file :-)
QFile ourFile;
// ...
ourFile.setFileName(fileName);
QDomDocument document;
if (!document.setContent(&ourFile))
{
// errorhandling ...
}
ourFile.close();
// we have a valid file! yay!
// parse it into our file object...
QDomElement documentElement = document.documentElement();
// top level:
QDomNode node = documentElement.firstChild();
parseXML(node);
// we have all variables now. place them into the labels.
// ...
ui.appname->setText(this->getAppName()); // crash!
}
Code: Alles auswählen
void MyXMLFile::parseXML(QDomNode& node)
{
QDomNode domNode = node.firstChild();
QDomElement domElement;
while (!(domNode.isNull()))
{
if (domNode.isElement())
{
domElement = domNode.toElement();
if (!(domElement.isNull()))
{
// ...
if (domElement.tagName().toUtf8() == "appName")
setAppName(domElement.text());
}
}
parseXML(domNode);
domNode = domNode.nextSibling();
}
// first element tree parsed. head over to the next.
if (!(node.nextSibling().isNull()))
{
parseXML(node.nextSibling());
}
}
Wer weiß Rat?