信号currentIndexChanged
的用法很清楚,当选择组合框中的不同项目时会触发它。但我面临另一个信号的问题。editTextChanged
会在用户手动更改组合框的editText
时触发,但也会在选择组合框中的另一个项目时触发,因此editTextChanged
和currentIndexChanged
都会触发。
我的问题是我需要知道这两种可能性中的哪一种发生在我的slot on_comboBox_editTextChanged()
中,文本是否被覆盖或选择了不同的项。从我所看到的来看,slot on_comboBox_editTextChanged()
被称为第一种,所以我不知道如何在slot中获得这些信息。
我在QComboBox
类中没有找到任何可以解决这个问题的东西,所以问题是如何区分editTextChanged是因为索引改变而触发的还是用户覆盖了editText?
2条答案
按热度按时间yyyllmsg1#
可编辑的
QComboBox
将具有***关联的***默认linedit
集合对象,该对象也可以直接与信号接口,例如:textEdited
,因此您可以选择使用&QComboBox::editTextChanged
信号的替代信号,textEdited
对象的linedit
信号,例如:因此,在本例中,当您选择组合框中的项目时,您将仅获得QComboBox信号
currentTextChanged
,而不是textEdited
,这是您的情况的区别。5n0oy7gb2#
您可以在
editTextChanged
处理程序中询问所选项的索引。如果返回-1,则表示文本已编辑,否则表示从下拉列表中选择了该项。如果文本已在文本框中键入,但存在于下拉列表中,则与用户从下拉列表中选择了该项的情况相同。currentIndex : int
此属性保存组合框中当前项的索引。
插入或移除项目时,当前索引可能会更改。
默认情况下,对于空组合框或未设置当前项的组合框,此属性的值为-1。