如何在QTableWidget中只读列?
我想在QTableWidget
有一列不可编辑。
在论坛上,我读了很多关于一些flags
但无法执行。
提前致谢!
插入QTableWidget以下types的项目:
QTableWidgetItem *item = new QTableWidgetItem(); item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
工作正常!
编辑:
QTableWidgetItem *item = new QTableWidgetItem(); item->setFlags(item->flags() ^ Qt::ItemIsEditable);
这是一个更好的解决scheme。 感谢@priomsrb。
使用XOR的结果取决于当前状态。 我build议使用
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
以确保无论当前设置如何,都可以closures编辑。
要将@ 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(); } } }
我来了一个更好的build议,只是用一个新的SLOT覆盖cellDoubleClicked信号。 这是,如果你不想修改任何单元格