LINUX.ORG.RU

[снова][QT][QTreeView] обновление модели

 


0

0

Прошу не пинать - я только начал разбираться с это штукой.

Вопрос такой:
Есть XML файл. Создаю переменную типа QStandardItem и для нее строю дерево в QTreeView элементов (с использованием QStandardItemModel), как показано в примере книжки (C++-GUI-Programming-with-Qt-4-1st-ed). Это у меня работает.


    treeModel = new QStandardItemModel(0,1);
    ui->treeView->setModel(treeModel);
...................

    QFile file(fileName);
    //класс для работы с моим XML
    DUT = new DUTconfig(&file);

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

    reBbuildTree();

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

bool MainWindow::reBbuildTree(){
    delete item;
    item = new QStandardItem("DUT");

    DUT->getTree(item);
    treeModel->clear();
    treeModel->setItem(0,0, item->takeChild(0,0));

    return true;
}
Возможно коряво, но ....)

Далее хочу добавить новый элемент.

Для этого узнаю выбранный элемент в дереве и добавляю в XML файле в соответствующую позицию. XML файл изменяется и структура итемов тоже.

void MainWindow::newDev(){

 bool ok;
     QString name = QInputDialog::getText(this, tr("Input dialog"),
                                          tr("Enter device name:"), QLineEdit::Normal,
                                          //QDir::home().dirName(), &ok);
                                          QString(""), &ok);

    
    if(name!=""){
        if(ui->treeView->selectionModel()->currentIndex().isValid()){
            
//bool DUTconfig::createDevice(QModelIndex idx, QString name)
//эта ф-я и правит мой XML
if(DUT->createDevice(ui->treeView->selectionModel()->currentIndex(), name)){                
                
                 //В следующей строке заново формирую дерево
                // этот момент мне очень не нравится
                reBbuildTree();


            }
            else QMessageBox::warning(this, "Warning!", "Device is not reated :(...");
        }
         qDebug()<<"newDev ui->treeView->selectionModel()->currentIndex().isValid()\n";
    }
    qDebug()<<"newDev Finish\n";
}

Теперь вопрос: Как мне (можно ли) добавить новый элемент уже в дерево, не переделывая его заново?
как мне правильно использовать void QStandardItemModel::itemChanged ( QStandardItem * item ) (на сколько я понимаю он для этого и предназначен)?
Где мне подавать этот сигнал или он сам генерится? И как потом его обрабатывать?
Не совсем ясен принцип обработки такого действия.
еще раз прошу не пинать)
Спасибо!

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