网上找了很多方法,还得重写model事件太麻烦了。
这边提供两种方法。
方法1:在表格添加时设置item属性editable为false即可。
QStandardItemModel *m_model = new QStandardItemModel(this);
m_model->setColumnCount(7);
ui.tableView->setModel(m_model);//设置model
ui.tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //先自适应宽度
for (int i = 0; i < 7; i++)
{
QList<QStandardItem*> valList;
QStandardItem *numcount = new QStandardItem(QString("%1").arg(i + 1));//序号
numcount->setEditable(false);//不可编辑
valList << numcount;
for (int j = 0; j < 6; j++)
{
QStandardItem* item = new QStandardItem("");
//在这可以设置想要不可编辑列 我这里用3
if(j==3)
item->setEditable(false);//不可编辑
valList << item;//空item
}
m_model->insertRow(i, valList);
}
方法二:
遍历表格,判断想要的不可编辑的列设置每个item不可编辑即可。
QStandardItemModel *m_model = new QStandardItemModel(this);
m_model->setColumnCount(7);
ui.tableView->setModel(m_model);//设置model
ui.tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //先自适应宽度
int rowCount = m_model->rowCount();//行数
int columnCount = m_model->columnCount();//列数
//这边列需要大于你所需要不可编辑的列 这里使用的是第二列
if (rowCount < 0 || columnCount < 2)
return;
//遍历行
for (int i = 0; i < rowCount;i++)
{
auto item = m_model->item(i, 2);
item->setEditable(false);
}