【发布时间】:2018-01-24 13:11:19
【问题描述】:
我有一个QListWidget 来存储用户名,我使用这个信号来检测用户名是否被更改:
connect(listWidget, &QListWidget::itemChanged, this, &MainWindow::changeUserName);
void MainWindow::changeUserName(QListWidgetItem *editItem)
{
qDebug() << "Name:" << editItem->text();
}
这就是我如何让QListWidget 在另一个函数中可编辑:
connect(listWidget, &QListWidget::itemDoubleClicked, this, &MainWindow::makeListEditable);
void MainWindow::makeListEditable()
{
QListWidgetItem *editItem = listWidget->currentItem();
editItem->setFlags(editItem->flags() | Qt::ItemIsEditable);
qDebug() << "Name edit";
}
但令我困惑的是,每当我双击列表小部件时,itemChanged 信号将被触发一次,当我输入新的用户名时,信号将再次被触发。为什么会这样?
这是调试输出,当我双击列表时,它显示:
Name: "Testing name_1"
Name edit
在我输入一个新名称并按回车后,它会说:
Name: "Testing name_2" //a new name I changed to
如果我只想在输入新名称并按回车键时触发一次信号,我应该怎么做才能做到这一点?
谢谢
【问题讨论】:
-
@eyllanesc 好的,我编辑它。
-
嗯,当你双击时,你改变你的项目的标志,所以这个项目在某种程度上改变了,对吧?您可能正在寻找看起来更像 itemTextChanged 的东西(虽然不确定这个是否存在)。快速浏览后,有 currentTextChanged 信号——doc.qt.io/archives/qt-4.8/qlistwidget.html#currentTextChanged
-
@Rafalon 是的,
itemTextChanged信号是我正在寻找的,但它不存在。我想要实现的是检测项目的文本是否已更改。不幸的是,我不知道该怎么做。 -
这不是 currentTextChanged 你在找什么吗?
标签: c++ qt qlistwidget