я улучшил эту редактируемую модель дерева из Qt: редактируемая модель дерева
Все работает нормально, как и ожидалось, тогда я изменил его для своих особых нужд, и там я не храню строки,Я храню сертификаты X509 и некоторые общие данные о нем, такие как эмитент и тема.Моя структура дерева выглядит так:
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, я каждый раз получаю данные Сертификата, который хранится в Сертификате А. Но мне нужно получить данные, которые хранятся вправильная запись (строка).Где моя проблема?