解決方案可能很簡單。然後再次這可能是不可能的。QtScript - 通過C++端實現腳本端回調
我有基本的回調類:
class CFCallback {
int command_;
int transfer_rate_;
public:
CFCallback(int command, int transfer_rate = 0) {
command_ = command; transfer_rate_ = transfer_rate; }
virtual ~CFCallback() {}
virtual void operator()(void *data) = 0;
int GetCommand() { return command_; }
int GetTransferRate() { return transfer_rate_; }
};
下面是從CFCallback
得出的一個例子:
void CFPacketVersion::InitiateVersion() {
class InitiateVersionCB : public CFCallback {
CFPacketVersion *visitor_;
public:
InitiateVersionCB(CFPacketVersion *v, int command) :
CFCallback(command) {
visitor_ = v;
}
void operator()(void *data) {
Packet *pkt = (Packet *)data;
unsigned char *pkt_data = pkt->GetData();
std::string version = "";
for(unsigned int i = 0; i < pkt->GetDataLength(); i++)
version+= pkt_data[i];
delete []pkt_data;
boost::regex rex("CFA(.*?):h(.*?),v(.*?)$");
boost::smatch what;
if(boost::regex_match(version, what, rex)) {
if(visitor_->GetModel()->GetName() != what[1].str())
LCDInfo("Crystalfontz: Model mismatch");
visitor_->SetHardwareVersion(what[2]);
visitor_->SetFirmwareVersion(what[3]);
}
}
};
GetVersion(new InitiateVersionCB(this, 1));
}
GetVersion(CFCallback *)
提供給腳本引擎。
我希望能夠做到InitiateVersion
中看到的同樣的事情,但在javascript的一面。那可能嗎?
我知道我需要註冊meta型信息CFCallback
。但我不知道是否可以使用指向CFCallback
的指針。我最初試過的東西沒有用。
此外,看到CFCallback
是一個仿函數,我不知道如何將它翻譯爲JavaScript。我想我可以讓CFCallback
a QObject
並提供從operator()
發出的信號。如果您有任何提示,請分享。