И вообще непонятно какой элемент не виден и при добавлении куда? Элемент верхнего уровня или "дочка"? При каких условиях это происходит?
Извините, если плохо пояснил.
Да дочку.
В базу(Base), добавляем станцию(MyStation) - дочка.
Кликаем один раз на базу, и жмем на плюсик - добавляем дочку.
Иногда, происходит так, что в правом окне(ListView) при добавлении элемента, он отображается.
А в левом окне(TreeView) нет.
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);
ui->mainToolBar->addAction(QIcon("D:/images/green_plus.png"),"append element",this,SLOT(appendElement()));
connect(this,SIGNAL(appendChild(QModelIndex)),treemodel,SLOT(updateModelInsertRow(QModelIndex)));
...
}
void MainWindow::appendElement()
{
qDebug()<<"appendElement";
if(currentElement != NULL)
{
Q_EMIT appendChild(currentModelIndex);
listmodel->setRoot(currentModelIndex);
}
}
C++ (Qt)
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();
}
}
C++ (Qt)
void ListModelBrowser::setRoot(QModelIndex index)
{
if(index.isValid())
{
QObject *obj = reinterpret_cast<QObject*>(index.internalPointer());
beginResetModel();
root = obj;
endResetModel();
}
}