Russian Qt Forum

Qt => XML => Тема начата: Stek от Июль 23, 2012, 12:33



Название: Чтение XML с отображением в TreeWidget
Отправлено: Stek от Июль 23, 2012, 12:33
Доброго времени суток!

Продолжаю разбираться с возможностью записи-чтения XML.
Есть такой код, корявенький, но работает так, как мне нужно:

Код:
void MainWindow::openFile()
{
    QString filePath = QFileDialog::getOpenFileName(this, tr("Открыть файл"),
            xmlPath, tr("XML files (*.xml);;HTML files (*.html);;"
                        "SVG files (*.svg);;User Interface files (*.ui)"));

        QStandardItem *root = new QStandardItem ("Main");
        root->setIcon(QIcon("D:/note.png"));
        model->appendRow(root);


        QDomDocument document;
        if (!filePath.isEmpty()) {
            QFile file(filePath);
            if (file.open(QIODevice::ReadOnly | QIODevice::Text))
                {

                    document.setContent(&file);
                    file.close();
                }

                //считываем root элемент
                QDomElement xmlroot = document.firstChildElement();

                //считываем childitems
                QDomNodeList books = xmlroot.elementsByTagName("entry");

                for (int i = 0; i < 1; i++)
                {
                    QDomElement book = books.at(i).toElement();
                    QStandardItem *bookitem = new QStandardItem(book.attribute("term"));
                    bookitem->setIcon(QIcon("pic.png"));




                    QDomNodeList ne_chapters = book.elementsByTagName("entry");
                    for (int h = 0; h < 1; h++)
                    {
                        QDomElement ne_chapter = ne_chapters.at(h).toElement();
                        QStandardItem *ne_chapteritem = new QStandardItem(ne_chapter.attribute("term"));
                        ne_chapteritem->setIcon(QIcon("D:/pic2.png"));
                        bookitem->appendRow(ne_chapteritem);

                    }

                    //считываем подпункты
                    QDomNodeList chapters = book.elementsByTagName("entry");
                    for (int h = 1; h < chapters.count()-1; h++)//выбираю все item кроме последнего
                    {
                        QDomElement chapter = chapters.at(h).toElement();
                        QStandardItem *chapteritem = new QStandardItem(chapter.attribute("term"));
                        chapteritem->setIcon(QIcon("D:/pic2.png"));

                        bookitem->appendRow(chapteritem);

                    }

                    for  (int s = chapters.count()-1; s < chapters.count(); s++)//последний item
                    {
                        QDomElement chapter = chapters.at(s).toElement();
                        QStandardItem *chapteritem = new QStandardItem(chapter.attribute("term"));
                        chapteritem->setIcon(QIcon("pic.png"));
                        bookitem->appendRow(chapteritem);

                    }
                   
                    root->appendRow(bookitem);

              }

      }

}


Перед этим для отображения в TreeView объявлена модель:

Код:
model = new QStandardItemModel (0,1,this);//0 - строка; 1 столбец;

ui->treeView->setModel(model);

Возникла необходимость вместо TreeView использовать TreeWidget, как я могу присвоить model TreeWidget в таком случае, возможно ли подружить его с QStandartItemModel или подход в корне неправильный и мне придётся переписывать всё иначе?

Заранее спасибо за помощь :)


Название: Re: Чтение XML с отображением в TreeWidget
Отправлено: mutineer от Июль 23, 2012, 12:44
QTreeWidget - Это QTreeView + встроенная модель. В чем смысл такого перехода?


Название: Re: Чтение XML с отображением в TreeWidget
Отправлено: DmitryM от Июль 23, 2012, 13:09
как я могу присвоить model TreeWidget в таком случае
Никак. У виджетов setModel находиться в private.


Название: Re: Чтение XML с отображением в TreeWidget
Отправлено: Stek от Июль 23, 2012, 13:18
Изначально использовал TreeWidget, динамически создавал item-ы и сохранял в xml, соответственно понадобилось ещё и чтение.
С TreeWidget чтение организовать у меня не получилось (смотрел примеры и qt и по Бланшету), не дал ладу по скольку с qt знаком второй месяц. Получилось по одному примеру отобразить как надо в TreeView, но использовать в своей программе и widget и view не вариант, очень нужно реализовать чтение именно в treewidget(на нём завязан ф-нал меню).

Ну вот как-то так   ???