2016-04-23 3 views
1

У меня есть TreeView в Qt Quick и класс подкласса QStandardItemModel. this.appendRow() отлично работает в конструкторе модели.QStandardItemModel appendRow не работает после того, как был вызван конструктор

Однако, если я вызываю его после конструктора, например, как реакция на нажатие какой-либо кнопки, он ничего не делает.

(Также проверено this->rowCount(), чтобы увидеть, может быть, он просто не отображается, но rowCount не увеличивается).

Я использую функцию addRootEntry, которую вы можете увидеть ниже, чтобы добавить QStandardItem в корень.

void ProjectTreeModel::addRootEntry(const QString& name, const QString& type, const QString& icon) 
{ 
QStandardItem rootEntry = new QStandardItem(name); 

rootEntry->setData(icon, ProjectTreeModel_Role_Icon); 
rootEntry->setData(type, ProjectTreeModel_Role_Type); 
rootEntry->setData(name, ProjectTreeModel_Role_Name); 

this->appendRow(rootEntry); 
qDebug() << rootEntry; //Is not null 
qDebug() << this->rowCount(); //Stays the same 
} 

ответ

0

Попробуйте это в addRootEntry функции:

QStandardItem *rootEntry = new QStandardItem(name); 

rootEntry->setData(icon, ProjectTreeModel_Role_Icon); 
rootEntry->setData(type, ProjectTreeModel_Role_Type); 
rootEntry->setData(name, ProjectTreeModel_Role_Name); 

QStandardItem *parentItem = invisibleRootItem(); 
parentItem->appendRow(rootEntry); 

Убедитесь ProjectTreeModel_Role_Name установлен в Qt::DisplayRole.

Обязательно укажите model недвижимость на TreeView.

Не рассматривайте подклассы QStandardItemModel, поскольку это обычно не требуется.

+0

Нет, к сожалению, это не работает. Элементы добавляются сейчас, но TreeView не обновляется. –

Смежные вопросы