Вставить и удалить строки в QTreeView

Добрый день, у меня есть базовая модель, унаследованная от QAbstractItemModel, и некоторые фоновые потоки, которые время от времени уведомляют эту модель, в примерах строки вставок реализуют что-то подобное

bool TreeModel::insertRows(int position, int rows, const QModelIndex &parent)
{
TreeItem *parentItem = getItem(parent);
bool success;

beginInsertRows(parent, position, position + rows - 1);
success = parentItem->insertChildren(position, rows, rootItem->columnCount());
endInsertRows();

return success;
}

Но я не могу сделать это так, потому что моя модель одиночная, которая использует 4 вида, я реализовал вставку следующим образом:

void notifyEventImpl(file_item_type *sender,helper<ITEM_ACTION_ADDED>)
{
base_class::setSize(file_item_type::size()+sender->size());
m_listDirectory.push_back(sender);
file_item_type::filesystem_type::s_notify.insert(this); // notify my model
}

куда s_notify это класс с реализацией:

 void Notifaer::dataChange(void * item){emit dataChanged(item);}
void Notifaer::remove(void * item){emit removed(item);}
void Notifaer::insert(void * item){emit inserted(item);}
void Notifaer::push_back(const FileItemModel * model)
{
VERIFY(QObject::connect(this,SIGNAL(dataChanged(void*)),model,SLOT(dataChangeItem(void*)) ));
VERIFY(QObject::connect(this,SIGNAL(removed(void*)),model,SLOT(removeItem(void*)) ));
VERIFY(QObject::connect(this,SIGNAL(inserted(void*)),model,SLOT(insertItem(void*)) ));
}

Учитывая это, я вызываю метод:

void FileItemModel::insertItem(void *it)
{
file_item_type *item = dynamic_cast<file_item_type*>(static_cast<file_item_type*>(it));

{
QModelIndex index = createIndex(0,0,item);
if (index.isValid())
{
beginInsertRows(index, 0, item->childCount()-1);
endInsertRows();
}
}
}
void FileItemModel::removeItem(void *it)
{
file_item_type *item = static_cast<file_item_type*>(it);

{
QModelIndex index = createIndex(0,0,item);
if (index.isValid())
{
beginRemoveRows(index, 0, item->childCount()-1);
endRemoveRows();
}
}
}

Удаление строк работает отлично, но вставка не работает. Что не так в моей реализации?

3

Решение

Попробуй с

 beginInsertRows(QModelIndex(), 0, item->childCount()-1);

Вы проверили документацию QT http://qt-project.org/doc/qt-4.8/qabstractitemmodel.html или примеры QT, чтобы получить какую-либо подсказку http://qt-project.org/doc/qt-4.8/itemviews-editabletreemodel.html?

Как вы сказали темы, может быть, это может быть интересно читать:

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]