QTableView
4 つの行と 4 つの列があり、それぞれがデータを表しています。デフォルトでQTableView
は、編集可能です。今、特定の列を編集不可にしたいと思いますQTableView
。
どうすればいいですか?
前もって感謝します。
QTableView
4 つの行と 4 つの列があり、それぞれがデータを表しています。デフォルトでQTableView
は、編集可能です。今、特定の列を編集不可にしたいと思いますQTableView
。
どうすればいいですか?
前もって感謝します。
機能を使用できますsetItemDelegateForColumn()
。読み取り専用のデリゲートを実装し、必要な列に設定します。
モデル内でフラグを使用しQt::ItemIsEditable
て、特定の列のフラグを削除することもできます。
そのようなものもそれを行うかもしれません:
class NotEditableDelegate : public QItemDelegate
{
Q_OBJECT
public:
explicit NotEditableDelegate(QObject *parent = 0)
: QItemDelegate(parent)
{}
protected:
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
{ return false; }
QWidget* createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const
{ return Q_NULLPTR; }
};
使用中で:
// Make all the columns except the second read only
for(int c = 0; c < view->model()->columnCount(); c++)
{
if(c != 1)
view->setItemDelegateForColumn(c, new NotEditableDelegate(view));
}
「フラグ」メソッドをオーバーライドし、選択した列の要素の編集可能パラメータを指定する必要があります
Qt::ItemFlags TableModel::flags(const QModelIndex &index) const
{
if(!index.isValid())
return Qt::NoItemFlags;
if(index.column() == SELECTED_COLUMN_NUM)
{
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
}
遅くなるかもしれませんが、参考までに。テーブル ビューをNoEditTrigger
次のように設定する必要があります。
myTableView->setModel(model);
myTableView->setEditTriggers(QAbstractItemView::NoEditTriggers)
overide メソッドでは、それをif(!(index.column() == 0)
に変更し、Flag
値を として変更しますFlag |= Qt::ItemisEditable
。
これは正常に動作します。