我希望在QTableWidget
中有一列是不可编辑的。
在论坛上我读到了很多关于flags
的内容,但是无法实现。
我希望在QTableWidget
中有一列是不可编辑的。
在论坛上我读到了很多关于flags
的内容,但是无法实现。
向 QTableWidget 中插入以下类型的项目:
QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
运行良好!
编辑:
QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(item->flags() ^ Qt::ItemIsEditable);
这是一个更好的解决方案。感谢 @priomsrb。
XOR 的结果取决于当前状态。我建议使用
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
确保编辑被关闭,而不考虑当前设置。
~
是按位取反运算符,应该被所有编译器支持。 - kocica要将 @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();
}
}
}
item->setFlags(item->flags() ^ Qt::ItemIsEditable);
。这样可以保留其他标志不变。 - priomsrbitem->flags() & ~Qt::ItemIsEditable
?XOR的结果取决于标志的默认状态。 - m7913d