如何在Qt外部调用信号?

时间:2015-02-18 19:49:15

标签: c++ qt signals-slots

我知道如何从信号所在的类中调用信号:使用emit。但是如果我想从父对象外部调用它呢?

我之所以要做的是因为给定的QPushButton连接到一个槽,该槽选择使用sender()调用它的按钮。现在我希望调用该槽的相同功能,但不是在手动点击按钮后,而是在代码本身内。通常我会以编程方式调用插槽,但由于sender()的使用,这种方式无效:直接调用插槽不会给它按钮的id。

那么我怎么能“外部”要求它发出一个信号呢?也就是说,如何让我的QPushButton从代码中发出clicked()信号,而不是用鼠标点击按钮?

3 个答案:

答案 0 :(得分:1)

您无法直接从父对象发出信号。

  

只有定义信号的类及其子类才能发出信号。 (http://qt-project.org/doc/qt-4.8/signalsandslots.html#signals

您可以在QPushButton emitClicked()中定义一个发出信号的方法。然后从代码中调用QPushButton实例上的emitClicked()

答案 1 :(得分:0)

似乎Qt Test模块就是针对这种情况。 查看有关模拟GUI事件的this教程。 基本上你使用QTest::​mouseClick并将指针传递给你的按钮。

答案 2 :(得分:0)

Qt标题包含这个有趣的行(在qobjectdefs.h中):

#define emit

这意味着emit关键字的存在与否对代码没有影响,只有这样才能使人类读者更明显地发出信号。也就是说:

 emit clicked();

完全相同(就C ++编译器而言)
 clicked();

鉴于此,如果你想让你的按钮发出clicked()信号,那只需要这样做:

 myButton->clicked();

(虽然如果你想要聪明一点,这也会同样有效):

 emit myButton->clicked();