【问题标题】:QComboBox Qt Creator signals slots never fireQComboBox Qt Creator 信号槽永远不会触发
【发布时间】:2015-02-19 02:38:11
【问题描述】:

我有一个包含组合框的非常简单的 Qt 窗口,我尝试使用 Qt Creator 为这个组合框创建信号槽。我试过activatedcurrentIndexChangedcurrentTextChanged,没有任何效果。 可能是什么原因? 同一窗口上的其他信号(按钮单击、菜单项单击)正常触发。操作系统为 Windows 7。

【问题讨论】:

  • 对哪个动作?用户\自动?信息不足。
  • 发布代码可能会有所帮助
  • 我不能发布整个项目,它太大而且还私密。但是,信号分配代码是由 Qt Creator 自己生成的,所以我不确定我的 Qt Creator 和任何其他论坛用户 Qt Creator 之间有什么不同。窗口头文件包含private slots: void on_ComoboBox_activated(int index);,.cpp文件包含此方法体,仅此而已。
  • 如果你真的需要答案,你应该创建一个 SSCCE。
  • 当我从表单中删除组合框并使用 Qt Creator 将其添加回来时,这个问题就消失了。所以看起来它是 Qt Creator 的错误。

标签: c++ qt qt-creator


【解决方案1】:

当您在 Qt Designer 中创建插槽时,在表单上,​​例如 QMainWindow 表单,如果您右键单击并Go to slot...,它会使用命名约定根据它们的名称自动将 ui 表单元素连接到插槽。

创建这些插槽后,您可以将对象名称更改为其他名称。

比如把comboBox1改成myComboBox,它会破坏自动连接的ui表单元素,因为名字不同。

http://doc.qt.io/qt-5/designer-using-a-ui-file.html#automatic-connections

具有自动连接功能的小部件和对话框

虽然在对话框中实现自定义槽很容易,并且 在构造函数中连接它,我们可以改用QMetaObject's 自动连接工具连接 OK 按钮的clicked() 信号 到我们的子类中的一个插槽。 uic 自动生成代码 对话框的setupUi() 函数来做到这一点,所以我们只需要声明和 实现一个名称遵循标准约定的插槽:

void on_<object name>_<signal name>(<signal parameters>);

这是您的组合框开始无法连接的最可能原因。

如果不是您可以根据命名在每次显式连接调用失败时看到它们的输出:

QObject::connect(ui->comboBox, SIGNAL(misspelled_signal()), this, SLOT(non_existent_slot()));

您将在运行时在Application Output 选项卡中获得非常有用的输出,以帮助诊断错误。

希望有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-11
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多