Еще тогда такой вопрос.
Вот работаю с Model-View-(View Model).
Добавляю элементы в дерево.
Отображаю их в общей структуре ,и при выделении элемента в дереве, отображаются его дочки в листе.
Иногда происходит так, что при добавлении элемента в общую структуру он не отображается.
А вот в листе виден.
Добавляем в общую структуру:
C++ (Qt)
//---------Global------------------
QModelIndex currentModelIndex;
CommonElement *currentElement;
//--------------------------------
void MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
...
currentElement = NULL;
root = new QObject(this);
base = new Base(root);
Delegate *mydelegate = new Delegate(this);
treeview = new TreeView(this);
treemodel = new TreeModelBrowser(root);
treeview->setModel(treemodel);
treeview->setEditTriggers(QAbstractItemView::DoubleClicked);
treeview->setItemDelegate(mydelegate);
listview = new ListView(this);
listmodel = new ListModelBrowser();
listmodel->initRoot(base);
listview->setModel(listmodel);
connect(treeview,SIGNAL(appendChildTree(QModelIndex)),treemodel,SLOT(updateModelInsertRow(QModelIndex)));
connect(treeview,SIGNAL(appendChildList(QModelIndex)),listmodel,SLOT(setRoot(QModelIndex)));
...
}
void MainWindow::appendElement()
{
qDebug()<<"appendElement";
if(currentElement != NULL)
{
Q_EMIT appendChild(currentModelIndex);
listmodel->setRoot(currentModelIndex);
}
}
void TreeModelBrowser::updateModelInsertRow(QModelIndex index)
{
if(index.isValid())
{
int row = index.row();
row++;
beginInsertRows(index,row,row);
CommonElement *ce = reinterpret_cast<CommonElement*>(index.internalPointer());
ce->appendChild();
endInsertRows();
}
}
void ListModelBrowser::setRoot(QModelIndex index)
{
if(index.isValid())
{
QObject *obj = reinterpret_cast<QObject*>(index.internalPointer());
beginResetModel();
root = obj;
endResetModel();
}
}