我知道如何从信号所在的类中调用信号:使用emit
。但是如果我想从父对象外部调用它呢?
我之所以要做的是因为给定的QPushButton连接到一个槽,该槽选择使用sender()
调用它的按钮。现在我希望调用该槽的相同功能,但不是在手动点击按钮后,而是在代码本身内。通常我会以编程方式调用插槽,但由于sender()
的使用,这种方式无效:直接调用插槽不会给它按钮的id。
那么我怎么能“外部”要求它发出一个信号呢?也就是说,如何让我的QPushButton从代码中发出clicked()
信号,而不是用鼠标点击按钮?
答案 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();