发出一个"点击()"来自C ++代码的BB Cascades按钮的信号

时间:2013-11-14 08:50:11

标签: c++ qt qml blackberry-10

我需要模拟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是一种受保护的方法。有没有解决这个问题并实现我的目标的工作?

3 个答案:

答案 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();