【问题标题】:Capturing text change events in a QComboBox在 QComboBox 中捕获文本更改事件
【发布时间】:2009-09-02 08:08:17
【问题描述】:

我正在 Red Hat Linux 上开发一个 Qt 应用程序。我想在QComboBox 中捕获回车键按下事件。

我已将一个插槽连接到信号 editTextChanged(),每次按键都会发出该信号,但 Enter 键 不会发出该信号。
为什么这样?有没有其他方法可以检测回车

【问题讨论】:

    标签: c++ linux qt qcombobox qkeyevent


    【解决方案1】:

    我假设您编写了一个插槽并将其连接到QComboBox::editTextChanged() 信号。
    当文本更改并且 Enter 没有更改文本时会触发此信号,它会接受它。如果您想捕获回车,您可以遵循多种方法。

    1. 子类QComboBox.
      覆盖keyPressEvent():首先调用QComboBox::keyPressEvent(),然后检查按下的键是否为Enter。如果是,则发出信号。
      需要时使用这个子类。如果您不知道如何在 QDesigner 中推广小部件,请搜索。

    2. 实现一个继承QObject 的新类。在这个类中,覆盖 eventFilter() :检查事件是否是按键。如果是,请检查是否是 Enter 键。如果是,则发出信号。
      然后,创建此类的一个实例并将其设置为您的QComboBox 的事件过滤器。将插槽连接到您实现的此实例的信号。

    如果这些不清楚,我建议阅读以下页面:

    Using Custom Widgets with Qt designer

    Qt Events & Event Filters

    【讨论】:

      【解决方案2】:

      您还可以查看activated( const QString& ) 信号。它可能会在用户按 Enter 键时发出。

      【讨论】:

      • 这正是我所需要的。令人沮丧的是,当用户更改选择时,editTextChanged() 在其他信号之前被调用,因此无法知道 /why/ 文本已更改。如果我在 editTextChanged() 之前得到了 activate() 或 currentIndexChanged() 信号,那么我可以做一些不同的事情......唉。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      相关资源
      最近更新 更多