3

次のような QStandardItemModel タイプのモデルがあります。

          QHash<int, QByteArray> roleNames;
          roleNames[Car2goVehicle::NameRole] =  "plate_number";
          roleNames[Car2goVehicle::DescriptionRole] = "address";
          roleNames[Car2goVehicle::FuelRole] = "fuel";
          roleNames[Car2goVehicle::InteriorRole] = "interior";
          roleNames[Car2goVehicle::ExteriorRole] = "exterior";
          roleNames[Car2goVehicle::VinRole] = "vin";
          roleNames[Car2goVehicle::LatRole] = "lat";
          roleNames[Car2goVehicle::LonRole] = "lon";
          roleNames[Car2goVehicle::DistanceRole] = "distance";
          d->m_vehiclesmodel = new RoleItemModel(roleNames);

そして今、私はこのように距離に従ってソートしたい

           d->m_vehiclesmodel->setSortRole(Qt::UserRole);
           d->m_vehiclesmodel->sort(Car2goVehicle::DistanceRole, Qt::AscendingOrder);

しかし、結果は間違っています。誰かがソート方法を教えてもらえますか?

ありがとう。

4

2 に答える 2

6

結果の何が問題になっていますか? ほとんどの場合、モデル自体をソートするのではなく、QSortFilterProxyModelを使用してビューをソートします。ドキュメントの例は次のとおりです。

QTreeView *treeView = new QTreeView;
MyItemModel *sourceModel = new MyItemModel(this);
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);

proxyModel->setSourceModel(sourceModel);
treeView->setModel(proxyModel);

上記の例では、役割と列を混同している可能性があります。Role 列挙型は次のようになります。

enum Role {
    NameRole=Qt::UserRole,
    DistanceRole,
    ...
};

距離の役割で並べ替えたい場合は、次のように呼び出します。

model->setSortRole( Car2goVehicle::DistanceRole );

次に、いくつかの列 (ロールとは関係ありません) で並べ替えます。たとえば、列 0:

model->sort( 0, Qt::AscendingOrder );
于 2011-04-20T14:30:23.737 に答える
0

が十分に強力なQSortFilterProxyModel場合は、使用をお勧めしません。QStandardItemModel::sort()代わりに、基本的な Qt シグナルを使い続けます。

ここでは PyQt を使用していますが、コードは C++ でも動作するはずです。

self.model = QStandardItemModel()
self.populate_model()
self.model.setHorizontalHeaderLabels(map(str, range(self.model.rowCount())))
self.treeview.setModel(self.model)
self.treeview.header().setSectionsClickable(True)
self.treeview.header().setSortIndicatorShown(True)
self.treeview.header().sortIndicatorChanged.connect(self.model.sort)

QHeaderView::sortIndicatorChangedと接続している最後の行に注意してくださいQStandardItemModel::sort

于 2017-04-22T23:12:52.483 に答える