我需要模拟一个按钮点击从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__1020/qnx6/usr/include/bb/cascades/controls/abstractbutton.h:60:14:错误:'void::cascades::AbstractButton::clicked()‘是受保护的
它说点击是一种受保护的方法。有什么工作可以解决这个问题和实现我的目标吗?
发布于 2013-11-14 09:10:09
您不能(不应该)简单地从目标类(发送方)外部发出信号,除非该类被设计为允许它。
相反,您应该做的是强迫类自行发出信号。如果您设计了这个类(这里不是这样的),那么通常添加一个函数来简单地发出信号,例如emitClicked() { emit clicked(); }。
有些类已经具有这样的功能。但如果他们不这么做,你需要另一个技巧:
如果您正在处理QWidgets,您可以生成用户输入事件,这些事件被处理得好像用户真的单击了特定的屏幕坐标一样;考虑到通常也会考虑的所有条件和状态(不一定会导致发出信号)。这可以通过调用qApp->notify(widget, event)来完成,其中event是指向在调用之前初始化的QEvent实例的指针,例如:QMouseEvent event(QEvent::User, pos, Qt::LeftButton, button, stateKey);
我看到你在使用BlackBerry级联系统。它不是基于QWidgets,但他们也使用QObject事件系统以类似的方式处理事件。因此,您应该能够从上面应用该方法。
发布于 2013-11-14 09:06:10
void QAbstractButton::click () [slot]应该为你做这件事。它将发出clicked()信号以及与按钮的单击行为相结合的所有功能。
也许正是由于这一事实,创建signalhandler类是不必要的。
干杯
发布于 2014-07-31 16:20:56
变化
emit button->clicked();至
emit button->click();https://stackoverflow.com/questions/19973195
复制相似问题