python tablewidget 不可编辑可选择_如何使一些列不可编辑,并在QTableView中编辑一些列?...

给你留下的信息,我创建了一个例子部件,这表明setData()甚至适用于不可编辑的索引。

型号

class MyModel : public QStandardItemModel

{

public:

MyModel(QObject* parent = 0)

: QStandardItemModel(parent)

{}

Qt::ItemFlags flags(const QModelIndex &index) const {

if(index.column() < 5)

return Qt::ItemIsEnabled|Qt::ItemIsSelectable;

else

return Qt::ItemIsEnabled|Qt::ItemIsSelectable|Qt::ItemIsEditable;

}

};

表构件

// .h

class MyTableWidget : public QWidget

{

Q_OBJECT

public:

MyTableWidget(QWidget* parent = 0);

private slots:

void onEditTextChanged(QString const&);

private:

void initWidgets();

void initLayout();

QTableView* table_view_;

MyModel* table_model_;

QLineEdit* table_edit_;

};

// .cc

MyTableWidget::MyTableWidget(QWidget* parent)

: QWidget(parent)

, table_view_(0)

, table_model_(0)

, table_edit_(0)

{

initWidgets();

initLayout();

}

void MyTableWidget::onEditTextChanged(QString const& text)

{

foreach(QModelIndex index, table_view_->selectionModel()->selectedIndexes())

table_model_->setData(index, text);

}

void MyTableWidget::initWidgets()

{

table_view_ = new QTableView(this);

table_edit_ = new QLineEdit(this);

table_model_ = new MyModel;

table_model_->setColumnCount(10);

table_model_->setRowCount(10);

for(int c = 0; c < table_model_->columnCount(); ++c) {

for(int r = 0; r < table_model_->rowCount(); ++r) {

table_model_->setData(table_model_->index(r,c), QString("foo"));

}

}

table_view_->setModel(table_model_);

connect(table_edit_, SIGNAL(textChanged(QString const&)),

this, SLOT(onEditTextChanged(QString)));

}

void MyTableWidget::initLayout()

{

QVBoxLayout* layout = new QVBoxLayout;

layout->addWidget(table_view_);

layout->addWidget(table_edit_);

setLayout(layout);

}

离开了Qt::ItemIsEditable标志只会阻止编辑通过处理此标识的任何调用者。例如,Qt代表在检查flags()之前,他们创建修改单元格值的编辑器。这可以防止调用setData()。如果您自己拨打setData(),那么在编辑数据时应该没有问题。

我假设你的错误在别的地方。您是否覆盖setData()来处理flags()?你有没有检查你所交付的ModelIndex是否正确?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值