我想有一列QTableWidget
不可编辑。
在论坛中,我读过很多关于一些flags
但无法实施的内容。
问问题
81267 次
4 回答
101
在 QTableWidget 中插入以下类型的项目:
QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
工作正常!
编辑:
QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(item->flags() ^ Qt::ItemIsEditable);
这是一个更好的解决方案。感谢@priomsrb。
于 2010-04-04T10:12:05.527 回答
50
使用 XOR 的结果取决于当前状态。我建议使用
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
以确保无论当前设置如何都关闭编辑。
于 2013-10-26T17:14:55.500 回答
2
我提出了一个更好的建议,只需用新的 SLOT 覆盖 cellDoubleClicked 信号。也就是说,如果您不希望修改任何单元格
于 2014-07-30T13:50:22.213 回答
0
要将@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();
}
}
}
于 2014-06-16T19:56:02.740 回答