c++ editTextChanged和currentIndexChanged之间的QComboBox关系

vddsk6oq  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(173)

信号currentIndexChanged的用法很清楚,当选择组合框中的不同项目时会触发它。但我面临另一个信号的问题。editTextChanged会在用户手动更改组合框的editText时触发,但也会在选择组合框中的另一个项目时触发,因此editTextChangedcurrentIndexChanged都会触发。
我的问题是我需要知道这两种可能性中的哪一种发生在我的slot on_comboBox_editTextChanged()中,文本是否被覆盖或选择了不同的项。从我所看到的来看,slot on_comboBox_editTextChanged()被称为第一种,所以我不知道如何在slot中获得这些信息。
我在QComboBox类中没有找到任何可以解决这个问题的东西,所以问题是如何区分editTextChanged是因为索引改变而触发的还是用户覆盖了editText?

yyyllmsg

yyyllmsg1#

可编辑的QComboBox将具有***关联的***默认linedit集合对象,该对象也可以直接与信号接口,例如:textEdited,因此您可以选择使用&QComboBox::editTextChanged信号的替代信号,textEdited对象的linedit信号,例如:

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

因此,在本例中,当您选择组合框中的项目时,您将仅获得QComboBox信号currentTextChanged,而不是textEdited,这是您的情况的区别。

5n0oy7gb

5n0oy7gb2#

您可以在editTextChanged处理程序中询问所选项的索引。如果返回-1,则表示文本已编辑,否则表示从下拉列表中选择了该项。如果文本已在文本框中键入,但存在于下拉列表中,则与用户从下拉列表中选择了该项的情况相同。
currentIndex : int
此属性保存组合框中当前项的索引。
插入或移除项目时,当前索引可能会更改。
默认情况下,对于空组合框或未设置当前项的组合框,此属性的值为-1。

相关问题