editTextChanged和currentIndexChanged之间的QComboBox关系

问题描述 投票:-1回答:2

信号currentIndexChanged的使用很清楚,当选择与组合框不同的项目时会触发它。但是我遇到了另一个信号的问题。当组合框的editTextChanged被用户手动改变时触发editText,但是当选择了来自组合框的另一个项目时,触发了editTextChangedcurrentIndexChanged

我的问题是我需要知道在我的插槽on_comboBox_editTextChanged()中发生了这两种可能性中的哪一种,文本是否被覆盖或者是否选择了不同的项目。从我看到的,插槽on_comboBox_editTextChanged()被称为第一个,所以我不知道如何在插槽中实现此信息。

我没有找到任何可以解决它的QComboBox类。所以问题是如何区分是否因为索引被更改或用户覆盖了editText而触发了editTextChanged?

c++ qt qcombobox
2个回答
0
投票

您可以在editTextChanged处理程序中询问所选项目的索引。如果返回-1,则编辑文本,否则从下拉列表中选择项目。文本框中键入了文本,但它存在于下拉列表中,与用户从下拉列表中选择项目的情况相同。

currentIndex : int

此属性保存组合框中当前项的索引。

插入或删除项目时,当前索引可能会更改。

默认情况下,对于空组合框或未设置当前项的组合框,此属性的值为-1。


0
投票

可编辑的QComboBox将有一个相关的默认linedit设置对象,它也可以直接接口信号,如:textEdited,所以你可以选择使用&QComboBox::editTextChanged信号的替代品,textEdited信号的linedit信号,例如:

connect(ui->comboBox->lineEdit(), &QLineEdit::textEdited, this, &MainWindow::textEdited);

因此,在这种情况下,当您在组合框中选择一个项目时,您将只获得QComboBox信号currentTextChanged,而不是textEdited,这是区分您的情况。

© www.soinside.com 2019 - 2024. All rights reserved.