Проблема с model->appendRow(root);



  • Всем Доброго Дня
    Проблема, не могу получить вывод текста QDomNodeList books = root.elementsByTagName("Book");
    завязка на #include "sortfilterproxy.h" , то есть QStandardItem root = new QStandardItem("Book"); model->appendRow(root); bookitem->appendRow(chapitem); root->appendRow(bookitem);
    @MAINWINNDOW.H
    class QAbstractItemModel;
    window.cpp
    model = new QStandardItemModel(0,1,this);@ C задокументированным нет проблем, но не не требуется вид дерева, в планах типа такого,
    QGroupBox
    .... = new QGroupBox("....");
    QFormLayout* layout = new QFormLayout; и так далее
    от бессоницы в голову ничего не идет, как выйти из положения ума не приложу, опыта очень мало. Ниже код, помогите пожалуйста с решением задачи
    @
    //void Window::readFile()
    //{
    // QStandardItem *root = new QStandardItem("Book");
    // root->setIcon(QIcon("D:/note.png"));
    // model->appendRow(root);
    // QDomDocument document;
    // QFile file(Filename);
    // if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    // {
    // document.setContent(&file);
    // file.close();
    // }
    // QDomElement xmlroot = document.firstChildElement();
    // //read the books
    // QDomNodeList books = xmlroot.elementsByTagName("Book");
    // for(int i = 0; i < books.count(); i++)
    // {
    // QDomElement book = books.at(i).toElement();
    // QStandardItem *bookitem = new QStandardItem(book.attribute("Name"));
    // //read the chap's
    // QDomNodeList chapters = book.elementsByTagName("Chapter");
    // for(int h = 0; h < chapters.count(); h++)
    // {
    // QDomElement chapter = chapters.at(h).toElement();
    // QStandardItem *chapitem = new QStandardItem(chapter.attribute("Name"));
    // bookitem->setIcon(QIcon("D:/pic2.png"));
    // bookitem->appendRow(chapitem);
    // }
    // root->appendRow(bookitem);
    // }
    //}
    void Window::ListElements(QDomElement root, QString tagname, QString attribute)
    {
    QDomNodeList items = root.elementsByTagName(tagname);
    qDebug() << "Total items = " << items.count();
    for(int i = 0; i < items.count(); i++)
    {
    QDomNode itemnode = items.at(i);
    // to element
    if(itemnode.isElement())
    {
    QDomElement itemele = itemnode.toElement();
    qDebug() << itemele.attribute(attribute);
    }
    }
    }
    void Window::readFile()
    {
    QDomDocument document;
    //Load the file
    QFile file(Filename);
    if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
    document.setContent(&file);
    file.close();
    }
    //get the root ele
    QDomElement root = document.firstChildElement();
    //List the books
    ListElements(root,"Book", "Name");
    //Get the chap's
    QDomNodeList books = root.elementsByTagName("Book");
    for(int i = 0; i < books.count(); i++)
    {
    QDomNode booknode = books.at(i);
    // to an ele
    if(booknode.isElement())
    {
    QDomElement book = booknode.toElement();
    qDebug() << "Chap's in " << book.attribute("Name");
    ListElements(book,"Chapter","Name");
    }
    }
    }
    @
    Запускается C:\Users\NEO\Desktop\apps-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK_________\debug\apps.exe...
    Total items = 2
    " My Book 0"
    " My Book 1"
    Chap's in " My Book 0"
    Total items = 2
    " My Chapter 0"
    " My Chapter 1"
    Chap's in " My Book 1"
    Total items = 2
    " My Chapter 0"
    " My Chapter 1"
    C:\Users\NEO\Desktop\apps-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK_________\debug\apps.exe завершился с кодом 0

    Пробовал другой вариант
    @
    void Window::readFile()
    {
    QFile file(Filename); if (!file.open(QIODevice::ReadOnly)) return ;
    QByteArray content = file.readAll();

    QDomDocument doc;
    
    QString errorMessage; int line, col;
    if (!doc.setContent(content, &errorMessage, &line, &col))
    {
    cout << "Error in Line " << line << ", column " << col << ":" << qPrintable(errorMessage) << endl; return ;
    }
    QDomElement root = doc.documentElement(); if (root.hasAttribute("id")) {
    QDomAttr attr = root.attributeNode("id");
    cout << "id: " << qPrintable(attr.value()) << endl;
    }
    QDomNode node = root.firstChild(); while(!node.isNull())
    {
    if(node.isElement()) {
    QDomElement elem = node.toElement();
    cout << "Child of root node: " << qPrintable(elem.tagName()) <<
    endl;
    cout << "Its text: " << qPrintable(elem.text()) << endl;
    }
    node = node.nextSibling();
    }
    

    }
    @
    Сменил xml файл, по прежнему требует QStandardItem *root = new QStandardItem("......");
    model->......?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.