2

Qtアイテムロールメカニズムはどのように実現されていますか? ロールをサポートするクラス内に保存されたある種のマップですか?

4

1 に答える 1

2

アイテム ロールは、リスト モデルのテキスト、アイコン、ツールチップなど、特定のモデル インデックスのさまざまなデータを取得するために使用されます。それらがどのように実装されるかは、モデルによって異なります。

QStandardItemModel は実際に QMap (役割から値へ) を内部的に使用します。

カスタム モデルの場合、通常は if または switch ステートメントを使用して、さまざまな役割のさまざまなデータを返します。

QVector<SomeObject> m_data;

QVariant SomeListModel::data( const QModelIndex& index, int role ) const {
    const SomeObject& so = m_data[index.row()];
    switch ( role ) {
    case Qt::DisplayRole:
        return so.name();
    case Qt::DecorationRole:
        return so.icon();
    case Qt::ToolTipRole:
        return so.details();
    case SomeObjectRole: // Custom role, SomeObjectRole=Qt::UserRole
        return QVariant::fromValue<SomeObject>( so );
    default:
        break;
    }

    return QVariant();
}

高速な index() および data() メソッドは、効率的なモデルを取得するために重要です。そのため、マップ ルックアップや、アイテム数 (ここでは m_data のサイズ) に関して O(1) ではないすべてのものを避けてください。

于 2013-01-13T23:10:11.130 に答える