10

QTableView4 つの行と 4 つの列があり、それぞれがデータを表しています。デフォルトでQTableViewは、編集可能です。今、特定の列を編集不可にしたいと思いますQTableView

どうすればいいですか?

前もって感謝します。

4

6 に答える 6

11

機能を使用できますsetItemDelegateForColumn()。読み取り専用のデリゲートを実装し、必要な列に設定します。

モデル内でフラグを使用しQt::ItemIsEditableて、特定の列のフラグを削除することもできます。

于 2012-09-27T08:01:45.847 に答える
11

そのようなものもそれを行うかもしれません:

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));
}
于 2013-10-08T14:49:49.360 に答える
1

「フラグ」メソッドをオーバーライドし、選択した列の要素の編集可能パラメータを指定する必要があります

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;
}
于 2021-05-05T18:01:56.727 に答える
0

遅くなるかもしれませんが、参考までに。テーブル ビューをNoEditTrigger次のように設定する必要があります。

myTableView->setModel(model);
myTableView->setEditTriggers(QAbstractItemView::NoEditTriggers)
于 2013-03-02T02:39:19.963 に答える
0

overide メソッドでは、それをif(!(index.column() == 0)に変更し、Flag値を として変更しますFlag |= Qt::ItemisEditable
これは正常に動作します。

于 2012-09-27T11:42:36.983 に答える