我需要模拟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_ */
在信号处理程序中.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()"受到保护
它说点击是一种受保护的方法。是否有任何解决方法可以解决此问题并实现我的目标?
你不能(不应该)简单地从目标类(发送方)之外发出信号,除非该类被设计为允许它。
相反,您应该做的是强制类自行发出信号。如果您设计了类(此处不是这种情况),则通常会添加一个仅发出信号的函数,例如emitClicked() { emit clicked(); }
。
某些类已经具有此类函数。但如果他们不这样做,你需要另一个技巧:
如果你正在处理QWidgets,你可以生成用户输入事件,这些事件被处理为用户真的点击了特定的屏幕坐标;考虑到所有条件和状态,这通常也会被考虑(不一定导致发出信号)。这可以通过调用qApp->notify(widget, event)
来完成,其中event
是指向在此调用之前初始化的 QEvent 实例的指针,例如:QMouseEvent event(QEvent::User, pos, Qt::LeftButton, button, stateKey);
我看到你正在使用BlackBerry Cascades系统。它不是基于QWidgets,但它们也使用QObject事件系统以类似的方式处理事件。因此,您应该能够应用上面的方法。
void QAbstractButton::click () [slot]
它将发出clicked()
信号以及所有功能,并结合按钮的点击行为
也许由于这个事实,没有必要创建signalhandler
类。
干杯
更改
emit button->clicked();
自
emit button->click();