にチェックボックスのある列がありますQTableView
。チェックボックスは次のように生成されます。
Qt::ItemIsUserCheckable
オーバーライドされたflags
メンバー関数で返す- オーバーライドされた関数では、データに従ってfor
data()
を返しますQt::CheckState
role == 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の答えを見つけました。