我正在Qt4.7中工作,并且在我的对话框中有一个QListWidget。我有一个QString,需要匹配该小部件的行中的当前文本(各行可编辑)。看看与QListWidget相关的信号,似乎有信号表示何时选择了不同的索引,但当前选定行的文本更改时没有信号。我认为currentTextChanged(QString)会这样做,但它没有。我也想过尝试连接每个单独的行,但QListWidgetItem没有任何内置信号。有谁知道一种方法来做到这一点?谢谢!Qt - 编辑QListWidget行时的信号?
回答
我猜你需要考虑以下信号:
void QListWidget::itemChanged(QListWidgetItem * item)
但是因为它被送到每一次项目的某些属性改变,不但文字要小心。我记得当我们改变项目的颜色时,遇到了这个问题,并因此得到了大量的假阳性插槽。如果您需要更好的调整,我想最好自己编写模型/视图类,而不要依赖QListWidget
。
起初看起来好像QListWidget :: itemChanged是要走的路,但很快你会遇到一个问题:信号被发送给所有的东西 - 插入,改变颜色,复选框和其他“改变”的东西项目! Predelnik在他的回答中指出了这一点。有些人试图通过截取各种信号来标记和过滤各处,以确定编辑是否是真实的事件。它变得非常混乱。
还有QAbstractItemModel :: dataChanged,这似乎是一个很好的解决方案。它甚至有一个参数“const QVector & lstRoles”,所以你可以扫描Qt :: EditRole并看看它是否真的被编辑过。唉,有一个问题 - 它会像QListWidget :: itemChanged一样被调用,不幸的是,对于QListWidget,无论如何,角色参数在被调用时总是空的(我试过了)。这么多的想法...
幸运的是,仍然有希望......这个解决方案有诀窍! :
http://falsinsoft.blogspot.com/2013/11/qlistwidget-and-item-edit-event.html
他用QAbstractItemDelegate :: closeEditor,但我更喜欢使用QAbstractItemDelegate :: commitData。
所以,做一个连接,像这样......
connect(ui.pLstItems->itemDelegate(), &QAbstractItemDelegate::commitData, this, &MyWidget::OnLstItemsCommitData);
然后实现这样的插槽...
void MyWidget::OnLstItemsCommitData(QWidget* pLineEdit)
{
QString strNewText = reinterpret_cast<QLineEdit*>(pLineEdit)->text();
int nRow = ui.pLstItems->currentRow();
// do whatever you need here....
}
现在你有一个被调用,只有当列表项的文字插槽已编辑!
- 1. 如何在每次在QListWidget中编辑行时发出信号?
- 2. QT:使用UO和向下箭头时QListwidget信号
- 3. Qt设计师 - 编辑|编辑信号/插槽
- 4. clear()被调用时QListWidget的itemSelectionChanged()信号
- 5. Qt:改变焦点时QLineEdit编辑完成信号两次?
- 6. 哪里是“Qt信号/插槽编辑器”生成的代码?
- 7. 如何通过单击它们在运行时编辑QListWidget中的文本?
- 8. Qt信号 - 时隙交互。
- 9. Qt信号映射:编辑发射器对象
- 10. Python Qt QListWidget双击
- 11. 信号QT,QueuedConnection
- 12. 信号和Qt的
- 13. QListWidget发送没有项目doubleClicked信号
- 14. 强制QListWidget信号在发射区
- 15. Qt/C++:检查QListWidgetItem时的信号?
- 16. 问题连接Qlistwidget itemDoubleClicked信号与插槽
- 17. 虚拟Qt信号?
- 18. LeapMotion,Qt和信号
- 19. RAII和Qt信号
- 20. Qt匿名信号
- 21. QT QNetworkAccessManager和信号
- 22. QT信号/插槽
- 23. 私人QT信号
- 24. Qt QListWidget性能问题
- 25. Python Qt QListWidget项目拖放
- 26. Qt C++缓慢移动QListWidget
- 27. Qt QListWidget addItem内存泄漏
- 28. Qt的:在的SelectionChanged()信号
- 29. 编辑Makefile行:来自Qt C++的CFLAGS
- 30. Qt Qt中的信号和插槽
查看模型 –
@DmitrySazonov的'dataChanged'信号工作,谢谢! – thnkwthprtls