仅使 QTreeWidget 的一列可编辑 // 故障排除
Making only one column of QTreeWidget editable // troubleshooting
请注意,这个问题不是问题 Making only one column of a QTreeWidgetItem editable 的重复,因为它提出的解决方案不起作用。
您好,我只想让我的 treeWidget 的一列可编辑。
propertyItems.push_back(new QTreeWidgetItem); //gets filled by the while-loop
propertyItems[propertyItems.size()-1]->setText(0, prop.name); //sets the text of the item
propertyItems[propertyItems.size()-1]->setText(1, prop.value);//set the text of the other item
propertyItems[propertyItems.size()-1]->setFlags(Qt::ItemIsEditable);
ui->treeWidget_3->insertTopLevelItem(ui->treeWidget_3->topLevelItemCount(), propertyItems[propertyItems.size()-1]); //appends the items
counter ++;
和
void MainWindow::onTreeWidget3ItemDoubleClicked()
{
if (ui->treeWidget_3->currentColumn() == 2) {
ui->treeWidget_3->editItem(ui->treeWidget_3->currentItem(), ui->treeWidget_3->currentColumn());
}
}
是我的方法。 ontreeWidget3ItemDoubleClicked
与 treeWidget::doubleClicked
相连,treeWidget_3 没有 edit-triggers
但是:当我执行程序时,QTreeView 只是变灰了。
也就是说,我也试过了
propertyItems[propertyItems.size()-1]->setFlags(propertyItems[propertyItem.size()].flags | Qt::ItemIsEditable);
treeWidget_3
不再变灰,但仍然不可编辑...
我该如何解决这个问题?
顺便说一句:我是 Qt 的新手,所以我可能忘记了一些重要的事情。在这种情况下很抱歉。
如documentation所述:
The QTreeWidgetItem class provides an item for use with the QTreeWidget convenience class.
这意味着它不适用于所有用例。解决方案是创建您自己的模型并重载返回 appropriate values 的 flags(const QModelIndex& index)
方法(基本上 Qt:: ItemIsEnabled
用于只读列,Qt:: ItemIsEnabled | Qt::ItemIsEditable
用于可编辑列)。您可以从 index.column()
.
中获取该列
Qt 提供了一个 example 从树和模型开始。
请注意,这个问题不是问题 Making only one column of a QTreeWidgetItem editable 的重复,因为它提出的解决方案不起作用。
您好,我只想让我的 treeWidget 的一列可编辑。
propertyItems.push_back(new QTreeWidgetItem); //gets filled by the while-loop
propertyItems[propertyItems.size()-1]->setText(0, prop.name); //sets the text of the item
propertyItems[propertyItems.size()-1]->setText(1, prop.value);//set the text of the other item
propertyItems[propertyItems.size()-1]->setFlags(Qt::ItemIsEditable);
ui->treeWidget_3->insertTopLevelItem(ui->treeWidget_3->topLevelItemCount(), propertyItems[propertyItems.size()-1]); //appends the items
counter ++;
和
void MainWindow::onTreeWidget3ItemDoubleClicked()
{
if (ui->treeWidget_3->currentColumn() == 2) {
ui->treeWidget_3->editItem(ui->treeWidget_3->currentItem(), ui->treeWidget_3->currentColumn());
}
}
是我的方法。 ontreeWidget3ItemDoubleClicked
与 treeWidget::doubleClicked
相连,treeWidget_3 没有 edit-triggers
但是:当我执行程序时,QTreeView 只是变灰了。
也就是说,我也试过了
propertyItems[propertyItems.size()-1]->setFlags(propertyItems[propertyItem.size()].flags | Qt::ItemIsEditable);
treeWidget_3
不再变灰,但仍然不可编辑...
我该如何解决这个问题?
顺便说一句:我是 Qt 的新手,所以我可能忘记了一些重要的事情。在这种情况下很抱歉。
如documentation所述:
The QTreeWidgetItem class provides an item for use with the QTreeWidget convenience class.
这意味着它不适用于所有用例。解决方案是创建您自己的模型并重载返回 appropriate values 的 flags(const QModelIndex& index)
方法(基本上 Qt:: ItemIsEnabled
用于只读列,Qt:: ItemIsEnabled | Qt::ItemIsEditable
用于可编辑列)。您可以从 index.column()
.
Qt 提供了一个 example 从树和模型开始。