5

にチェックボックスのある列がありますQTableView。チェックボックスは次のように生成されます。

  1. Qt::ItemIsUserCheckableオーバーライドされたflagsメンバー関数で返す
  2. オーバーライドされた関数では、データに従ってfordata()を返しますQt::CheckStaterole == Qt::CheckStateRole

動作します。スクリーンショットを参照してください。

しかし、チェックボックスの横に、列に編集可能なテキストボックスがあります。このテキストボックス(デモンストレーションのために「dsdsdsds」と入力した場所) を削除するにはどうすればよいですか?

読み取りモード 編集モード


リクエストに応じて、簡略化されたバージョンのみを表示できます

Qt::ItemFlags MyClass::flags(const QModelIndex &index) const {
 Qt::ItemFlags f = QAbstractListModel::flags(index);
 ... return f if index is not target column ....
 // for target column with checkbox
 return (f | Qt::ItemIsEditable | Qt::ItemIsUserCheckable; )
}


QVariant MyClass::data(const QModelIndex &index, int role) const {
  .. do something for other columns
  .. for checkbox column
  if (role != Qt::CheckStateRole) { return QVariant(); }
  bool b = ... get value for checkbox column
  Qt::CheckState cs = b ? Qt::Checked : Qt::Unchecked;
  return QVariant(static_cast<int>(cs));
}

削除するQt::ItemIsEditableと、チェックボックスも読み取り専用になります。私は後で同様のアプローチでSOの答えを見つけました。


注意:QTableViewのチェックボックスのみの列の重複はありません

4

1 に答える 1