gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:57 27 4
gpt4 key购买 nike

我需要从 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: error: 'void bb::cascades::AbstractButton::clicked()' is protected

它说点击是一个 protected 方法。是否有解决此问题并实现我的目标的解决方法?

最佳答案

你不能(不应该)简单地从目标类(发送者)的外部发出信号,除非该类被设计为允许它。

您应该做的是强制类自己发出信号。如果您设计了类(这里不是这种情况),您通常会添加一个简单地发出信号的函数,例如 emitClicked() { emit clicked();

一些类已经有这样的功能。但如果他们不这样做,您就需要另一个技巧:

如果您正在处理 QWidgets,您可以生成用户输入事件,这些事件的处理就像用户真的点击了特定的屏幕坐标一样;考虑通常也会考虑的所有条件和状态(不一定导致发出信号)。这可以通过调用 qApp->notify(widget, event) 来完成,其中 event 是指向在此调用之前初始化的 QEvent 实例的指针,例如:QMouseEvent 事件(QEvent::User, pos, Qt::LeftButton, button, stateKey);

我看到您正在使用 BlackBerry Cascades 系统。它不是基于 QWidgets,但它们也使用 QObject 事件系统以类似的方式处理事件。因此,您应该能够应用上面的方法。

关于c++ - 从 C++ 代码发出 BB 级联按钮的 "clicked()"信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19973195/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com