10

我有QTableView4 行和 4 列,每列代表他们的数据。默认情况下QTableView是可编辑的。现在我想在我的QTableView.

我该怎么做?

提前致谢。

4

6 回答 6

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 回答
11

您可以使用该setItemDelegateForColumn()功能。实现一个只读委托,并将其设置为您需要的列。

您还可以在模型中使用标志,并删除Qt::ItemIsEditable特定列的标志。

于 2012-09-27T08:01:45.847 回答
4

最简单的方法是设置您不想以这种方式编辑的项目的标志:

item->setFlags(item->flags() &  ~Qt::ItemIsEditable);

您还可以查看此线程:Qt How to make a column in QTableWidget read only

于 2015-09-09T20:43:34.010 回答
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

在覆盖方法中,只需将其更改为if(!(index.column() == 0)并将Flag值更改为Flag |= Qt::ItemisEditable.
这很好用。

于 2012-09-27T11:42:36.983 回答