信号currentIndexChanged
的使用很清楚,当选择与组合框不同的项目时会触发它。但是我遇到了另一个信号的问题。当组合框的editTextChanged
被用户手动改变时触发editText
,但是当选择了来自组合框的另一个项目时,触发了editTextChanged
和currentIndexChanged
。
我的问题是我需要知道在我的插槽on_comboBox_editTextChanged()
中发生了这两种可能性中的哪一种,文本是否被覆盖或者是否选择了不同的项目。从我看到的,插槽on_comboBox_editTextChanged()
被称为第一个,所以我不知道如何在插槽中实现此信息。
我没有找到任何可以解决它的QComboBox
类。所以问题是如何区分是否因为索引被更改或用户覆盖了editText而触发了editTextChanged?
您可以在editTextChanged
处理程序中询问所选项目的索引。如果返回-1,则编辑文本,否则从下拉列表中选择项目。文本框中键入了文本,但它存在于下拉列表中,与用户从下拉列表中选择项目的情况相同。
currentIndex : int
此属性保存组合框中当前项的索引。
插入或删除项目时,当前索引可能会更改。
默认情况下,对于空组合框或未设置当前项的组合框,此属性的值为-1。
可编辑的QComboBox
将有一个相关的默认linedit
设置对象,它也可以直接接口信号,如:textEdited
,所以你可以选择使用&QComboBox::editTextChanged
信号的替代品,textEdited
信号的linedit
信号,例如:
connect(ui->comboBox->lineEdit(), &QLineEdit::textEdited, this, &MainWindow::textEdited);
因此,在这种情况下,当您在组合框中选择一个项目时,您将只获得QComboBox信号currentTextChanged
,而不是textEdited
,这是区分您的情况。