【问题标题】:QComboBox relation between editTextChanged and currentIndexChangededitTextChanged 和 currentIndexChanged 之间的 QComboBox 关系
【发布时间】:2018-03-04 23:54:56
【问题描述】:

Usage of the signal currentIndexChanged is clear, it's triggered when a different item from combobox is selected.但我正面临另一个信号的问题。 editTextChanged 会在用户手动更改组合框的editText 时触发,同时也会在选择组合框中的另一个项目时触发,因此editTextChangedcurrentIndexChanged 都会被触发。

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

我在QComboBox 类中没有找到任何可以解决它的东西。那么问题来了,如何区分editTextChanged是因为index被改变还是用户覆盖了editText而触发的?

【问题讨论】:

    标签: c++ qt qcombobox


    【解决方案1】:

    可编辑的QComboBox 将有一个关联 默认的linedit 设置对象,也可以直接与信号接口,例如:textEdited,因此您可以选择使用&QComboBox::editTextChanged 信号的替代方法,例如linedit 对象的textEdited 信号:

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

    因此,在这种情况下,当您在组合框中选择一个项目时,您只会收到 QComboBox 信号 currentTextChanged,而不是 textEdited,这是您的案例的一个区别。

    【讨论】:

      【解决方案2】:

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

      currentIndex : int

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

      当前索引可以在插入或删除项目时改变。

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

      【讨论】:

        猜你喜欢
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        • 2011-09-06
        • 2016-06-10
        • 2013-02-03
        • 2019-07-10
        • 2017-04-04
        • 2010-12-12
        相关资源
        最近更新 更多