从C++代码发出 BB 级联按钮的"clicked()"信号



我需要模拟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();

最新更新