Qtアイテムロールメカニズムはどのように実現されていますか? ロールをサポートするクラス内に保存されたある種のマップですか?
質問する
336 次
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 に答える