Прошу не пинать - я только начал разбираться с это штукой.
Вопрос такой:
Есть 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 ) (на сколько я понимаю он для этого и предназначен)?
Где мне подавать этот сигнал или он сам генерится? И как потом его обрабатывать?
Не совсем ясен принцип обработки такого действия.
еще раз прошу не пинать)
Спасибо!