Qt - 如何将QTableView的特定列设置为不可编辑?

New*_*oon 6 c++ qt delegates qtableview qt4.7

我有一个QTableView4行和4列,每列代表它们的数据.默认情况下,它QTableView是可编辑的.现在我想让任何特定的列在我的文件中不可编辑QTableView.

我该怎么做?

提前致谢.

Sin*_*all 10

你可以使用这个setItemDelegateForColumn()功能.实现只读委托,并为您需要的列设置它.

您也可以使用该标志的模型中,并删除Qt::ItemIsEditable标志的特定列.


Mas*_*ler 8

这样的事情也可以这样做:

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; }

};
Run Code Online (Sandbox Code Playgroud)

正在使用:

// 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));
}
Run Code Online (Sandbox Code Playgroud)


Ang*_*ano 6

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

item->setFlags(item->flags() &  ~Qt::ItemIsEditable);
Run Code Online (Sandbox Code Playgroud)

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