LINUX.ORG.RU

[сново QT] XML


0

0

Уважаемые, вот кусо кода:

QDomElement file = newcurve.toDocument().createElement("file");
            file.setAttribute("num",QString::number(i+1));
            newcurve.appendChild(file);

...................................................

QDomElement cir = file.toDocument().createElement("Cir");
            cir.appendChild(cir.toDocument().createTextNode(QString::fromStdString(cur.inFile.at(i))));            
            file.appendChild(cir);            

qDebug()<<"cir.text() : "<<(cir.text())<<" cur.inFile.at(i): "<<QString::fromStdString(cur.inFile.at(i));

а вот, что получается (см. последние символы строк):
cir.text() :  "power/10yq045/idvg-0.cis"  cur.inFile.at(i):  "power/10yq045/idvg-0.cir"

Кстати, вот, что еще выводится в консоли при закрытии программы:

*** glibc detected *** ./SpiceParamExtractor: double free or corruption (out): 0x0817c020 ***

Почему так? Что с последним символом строк? («power/10yq045/idvg-0.cis» и «power/10yq045/idvg-0.cir»)
Далее,
из исходников собрал KDE 4.5 под Debian Etch, скомпилял исходники и там ничего такого плохого нету.
Все работает, как я хочу и никаких «double free or corruption» нету.
Неужели дело в QT? (OpenSuse 11.2 QT 4.5.3-2.4.2)...

QT - Quick Time - проигрыватель
Qt - инструментарий для разработчика
Пожалуйста, не путайте понятия...

C_H_A_D_o
()
Ответ на: комментарий от C_H_A_D_o

Ок, исправлюсь!
А можно ли сейчас поменять название темы?

spike_by
() автор топика

зачем toDocument()?
у тебя что, ссылки на документ нету?

собрал KDE 4.5 под Debian Etch,

OMG!!!!!!

а за «QT» пора бы банить уже

k0l0b0k ★★
()
Ответ на: комментарий от k0l0b0k

у тебя что, ссылки на документ нету?

а как правильно?

Про KDE - это я загнул. Конечно же имел в виду Qt 4.5)

spike_by
() автор топика
Ответ на: комментарий от spike_by

я вызывал createElement и прочие create* на объекте документа который создаю. Что-то вроде

QDomDocument doc;
QDomElement root = doc.createElement();
doc.appendChild(root);
QDomElement mytag = doc.createElement();
root.appendChild(mytag);

и т.д.

в туторах тоже вроде так было, не помню уже.

toDocument() вернет тебе объект который ты нигде дальше по тексту не используешь, и компилятор его грохает сразу же после вызова create*()

k0l0b0k ★★
()
Ответ на: комментарий от spike_by

ну собственно root.appendChild(mytag); добавляет mytag к root.

или как вариант:

Since elements, text nodes, comments, processing instructions, etc., cannot exist outside the context of a document, the document class also contains the factory functions needed to create these objects. The node objects created have an ownerDocument() function which associates them with the document within whose context they were created.

k0l0b0k ★★
()
Ответ на: комментарий от k0l0b0k

Спасибо, понял. По поводу дочерних элементов я имел в виду вот такое:

QDomElement cir = doc.createElement("Cir");
                         cir.appendChild(doc.createTextNode(QString::fromStdString(cur.inFile.at(i))));
 file.appendChild(cir);            

Изначально я думал, что doc.create... создает потомка в корне. Теперь разобрался
Спасибо!

spike_by
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.