如何使 QTableWidget 中的列只读?

我想有一个专栏在 QTableWidget 没有可编辑。
在论坛上,我读了很多关于 flags的文章,但是没能实现。

87035 次浏览

在 QTableWidget 中插入以下类型的项:

QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

没问题!

编辑:

QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(item->flags() ^ Qt::ItemIsEditable);

这是一个更好的解决方案。

使用 XOR 的结果取决于当前的状态

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

以确保无论当前设置如何都关闭编辑。

要将@Narek 的代码应用于行或列,只需使用一个简单的 for 循环并放入一个条件,以包含您不希望可编辑的行/列的标志。

下面的代码将 csv 文件读入 QTableWidget:

if(!rowOfData.isEmpty()){
for (int x = 0; x < rowOfData.size(); x++)
{
rowData = rowOfData.at(x).split(",");
if(ui->table_Data->rowCount() <= x) ui->table_Data->insertRow(x);
for (int y = 0; y < rowData.size(); y++)
{
QTableWidgetItem *item = new QTableWidgetItem(rowData[y],QTableWidgetItem::Type);
if( y < 3 ) item->setFlags(item->flags() ^ Qt::ItemIsEditable);   // Only disables the first three columns for editing, but allows the rest of the columns to be edited
ui->table_Data->setItem(x,y,item);
ui->table_Data->repaint();
}
}
}

我想到了一个更好的建议,用一个新的 SLOT 覆盖 cellDoubleClicks 信号。 这是,如果您不希望修改任何单元格