我从Qt:Editable TreeModel
中强加了这个可编辑TreeModel。所有功能都按预期工作,然后我针对我的特殊需要对其进行了修改,并且我不存储字符串,而是存储X509证书以及它的一些常规数据,例如颁发者和主题。所以我的treeview结构看起来像这样:
Subject, Issuer, Valid Till, Certificate Data
请注意,证书数据未在树视图中显示,仅在其他三个字段中显示。这可以正常工作,因此,如果存在由另一个证书签名的证书,则我的树状视图可能看起来像这样:
- Certificate A
- Certificate B (which was signed by A)
- Certificate C (which wassigned by B)
- Certificate D
- Certificate E
因此,我实现了双击侦听器,该侦听器返回证书数据(字段4),效果很好。
现在,我想使树形视图可排序。因此,我想使用QSortFilterProxyModel。这是正确的方法吗?还是有另一个/更好的解决方案?
因此,我尝试了以下操作,并以此方式设置了我的模型和QSortFilterProxyModel:
QVector<X509*> certificates getCertificates(storeName);
m_model = new TreeModel(certificates);
m_proxy = new QSortFilterProxyModel;
m_proxy->setSourceModel(m_model);
ui->treeView->setModel(m_proxy);
ui->treeView->expandAll();
然后在双击侦听器中即时通讯进行调用:
QVariant data = m_proxy->data(m_proxy->index(index.row(), 4));
这不正确,因为当我单击证书B或证书C时,我每次都获得存储在证书A下的证书数据。但是我需要获取存储在正确条目(行)下的数据。我的问题在哪里?
答案 0 :(得分:0)
根据Simons的评论,该问题的解决方案是传递父索引(树结构),以便我的代码看起来像这样:
QVariant data = m_proxy->data(m_proxy->index(index.row(), 4, index.parent()));