怎么设置Qt中Qtreewidgetitem信号itemchanged只在名称改变时候触发
时间: 2024-03-13 08:44:53 浏览: 226
可以通过重写QTreeWidgetItem的setData函数来实现。
示例代码如下:
```cpp
class MyTreeWidgetItem : public QTreeWidgetItem
{
public:
using QTreeWidgetItem::QTreeWidgetItem;
void setData(int column, int role, const QVariant& value) override
{
if (role == Qt::EditRole && column == 0) { // 只有第0列的数据被修改才会触发信号
auto oldText = text(0);
auto newText = value.toString();
if (oldText != newText) { // 只有名称改变时才会触发信号
QTreeWidgetItem::setData(column, role, value);
emit itemChanged(this, column); // 发射自定义信号
}
} else {
QTreeWidgetItem::setData(column, role, value);
}
}
signals:
void itemChanged(QTreeWidgetItem* item, int column);
};
```
在使用QTreeWidgetItem时,可以使用自定义的MyTreeWidgetItem来替代原来的QTreeWidgetItem,然后连接itemChanged信号即可。
示例代码如下:
```cpp
auto item = new MyTreeWidgetItem(treeWidget);
connect(item, &MyTreeWidgetItem::itemChanged, this, [](QTreeWidgetItem* item, int column){
qDebug() << "itemChanged: " << item->text(column);
});
```
阅读全文