При создании подкласса QAbstractItemModel ничего не отображается в QTreeView

Я пытаюсь использовать простую модель дерева, но не смог заставить пример работать в моем проекте.

Во-первых, я смог без проблем использовать QTreeView с QStandardItemModel. В следующем случае я могу увидеть свой QTreeView с данными внутри. Смотрите рабочий код:

constructor{
m_pModel = new QStandardItemModel();
ui.treeViewDevicesList->setModel(m_pModel);
fillTreeView(devicesList);
}

void GatewayDeviceViewerEditor::fillTreeView(const std::vector<Payload> &devicesList)
{
    QVector<QStandardItem *> parents(MAX_PARENTS);
    parents[0] = m_pModel->invisibleRootItem();

    for (vector<Payload>::const_iterator it = devicesList.begin() ; it != devicesList.end(); ++it)
    {
        QStandardItem *pTreeViewItem = new QStandardItem();
        string rootTitle =  it->deviceId + " " + it->deviceName + " " + it->status ;
        pTreeViewItem->setText(rootTitle.c_str());
        parents[0]->appendRow(pTreeViewItem);
       // parents[1] = pTreeViewItem;
    }
}

Теперь следующий код НЕ работает. Я пытаюсь создать подкласс модели. В этом случае QTreeView отображается, но полностью пуст. Есть кое-что, чего я не понимаю.

entryPoint{
DeviceTreeModel deviceTreeModel(devicesList);
ui.treeViewDevicesList->setModel(&deviceTreeModel);
}

DeviceTreeModel::DeviceTreeModel(const std::vector<Payload> &devicesList, QObject *parent)
    : QAbstractItemModel(parent)
{
    QList<QVariant> rootData;
    rootData << "Title" << "Summary";
    m_pRootItem = new DeviceTreeItem(rootData);
    setupModelData(devicesList, m_pRootItem);
}

void DeviceTreeModel::setupModelData(const std::vector<Payload> &devicesList, DeviceTreeItem *parent)
{
    QList<DeviceTreeItem*> parents;
    parents << parent;


    for (vector<Payload>::const_iterator it = devicesList.begin() ; it != devicesList.end(); ++it)
    {
        string rootTitle =  it->deviceId + " " + it->deviceName + " " + it->status ;
        QString test(rootTitle.c_str());
        QList<QVariant> columnData;
        columnData << test << "Summary";

        parents.last()->appendChild(new DeviceTreeItem(columnData, parents.last()));
    }

}

person peterphonic    schedule 27.05.2013    source источник


Ответы (1)


В entryPoint я думаю, что deviceTreeModel нужно выделить с помощью new, а не быть локальным экземпляром, который будет уничтожен при выходе из функции.

person HelperY    schedule 30.12.2015