我想知道是否可以通过编程发射某些特定的信号。例如,我想在用户实际上没有点击该按钮的情况下发射另一个按钮的单击事件。我能做到吗?
为什么不直接调用槽函数,而是要自己发出信号并连接到槽函数呢?槽函数和其他C++函数一样,可以被直接调用。我看不到任何理由需要发出一个预定义的信号(比如clicked()
)。直接调用你的槽函数即可。
如果您为按钮设置了一个动作,您也可以简单地调用该动作来触发它。只需使用 action_of_the_button->trigger();
!
#include <QObject>
class myClass : public QObject
{
Q_OBJECT
public:
myClass (QObject *parent = 0) : QObject(parent) { }
void foo();
signals:
void mySignal(int param);
};
void myClass::foo() { emit mySignal(5); }
请访问http://doc.qt.io/qt-4.8/signalsandslots.html以了解更多信息。
您还可以连接一个信号到另一个信号,这样您就可以连接我的信号到按钮的单击信号,当您的信号发射时,单击信号也将被发射,详情请参见http://doc.qt.io/qt-4.8/qobject.html#connect。
信号在内部实现为C++受保护成员函数,所以我建议不要这样做。(在Qt 5中它们是公共的,但仍不建议作为一般解决方案。)
通过moc,Qt 实现了 emit 关键字,允许你通过编码来发出信号。
如果你使用的类没有提供发射某个信号的方法,你可以对其进行子类化,并实现一个能够发射该信号的函数。但我必须说,我从未为“正常”的信号这样做过。只有在自己定义某个类扩展中定义自己的信号时才这样做。