我需要模拟C ++代码中的按钮单击。到目前为止我编写了以下代码
/*
* signalhandler.hpp
*
* Created on: Nov 14, 2013
* Author: fnazeem
*/
#ifndef SIGNALHANDLER_HPP_
#define SIGNALHANDLER_HPP_
#include <QObject>
namespace bb
{
namespace cascades
{
class Button;
}
}
class signalhandler : public QObject
{
Q_OBJECT
public:
signalhandler();
public slots:
void onClicked(bb::cascades::Button *button);
};
#endif /* SIGNALHANDLER_HPP_ */
到目前为止,在signalhandler.cpp中这就是我的意思。假设我有一个特定按钮的地址,我想为该按钮发出“点击”信号,而不是手动点击它。
/*
* signalhandler.cpp
*
* Created on: Nov 14, 2013
* Author: fnazeem
*/
#include "signalhandler.hpp"
#include <bb/cascades/Button>
void signalhandler::onClicked(bb::cascades::Button *button){
emit button->clicked();
}
当我构建项目时,我在emit button->clicked();
这是错误
C:/bbndk/target_10_1_0_1020/qnx6/usr/include/bb/cascades/controls/abstractbutton.h:60:14: 错误:'void bb :: cascades :: AbstractButton :: clicked()'受保护
它表示clicked是一种受保护的方法。有没有解决这个问题并实现我的目标的工作?
答案 0 :(得分:3)
你不能(不应该)简单地从目标类(发送者)之外发出信号,除非该类被设计为允许它。
你应该做的是强迫班级自己发出信号。如果您设计了类(这里不是这种情况),您通常会添加一个只发出信号的函数,例如emitClicked() { emit clicked(); }
。
有些课程已经有了这样的功能。但如果他们不这样做,你需要另一个技巧:
如果您正在处理 QWidgets ,则可以生成用户输入事件,这些事件的处理就像用户真正点击特定屏幕坐标一样;考虑通常也会考虑的所有条件和状态(不一定导致发出信号)。这可以通过调用qApp->notify(widget, event)
来完成,其中event
是指向在此调用之前初始化的QEvent实例的指针,例如:QMouseEvent event(QEvent::User, pos, Qt::LeftButton, button, stateKey);
我发现您正在使用 BlackBerry Cascades 系统。它不是基于QWidgets,但它们也使用QObject事件系统以类似的方式处理事件。所以你应该能够应用上面的方法。
答案 1 :(得分:0)
void QAbstractButton::click () [slot]
应该为你做的工作。它将发出clicked()
信号以及与按钮的点击行为相结合的所有功能
也许是因为这个事实,没有必要创建signalhandler
类。
欢呼声
答案 2 :(得分:0)
更改
emit button->clicked();
到
emit button->click();