Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JS发出事件并在C++; 我试图创建一个移动窗口,而不需要创建任何小部件(除了 QWebVIEW >),我想知道是否可以从JavaScript(代码< >QWebVIEW >)中发出 QMousEvg/,并用C++? 我已经知道如何从JS(反之亦然)调用C++方法,但我问我是否能够生成/发出包含 QMousEvgs/COD>的事件(这是非常重要的,因为当前全局位置的光标)._Javascript_C++_Qt4 - Fatal编程技术网

从JS发出事件并在C++; 我试图创建一个移动窗口,而不需要创建任何小部件(除了 QWebVIEW >),我想知道是否可以从JavaScript(代码< >QWebVIEW >)中发出 QMousEvg/,并用C++? 我已经知道如何从JS(反之亦然)调用C++方法,但我问我是否能够生成/发出包含 QMousEvgs/COD>的事件(这是非常重要的,因为当前全局位置的光标).

从JS发出事件并在C++; 我试图创建一个移动窗口,而不需要创建任何小部件(除了 QWebVIEW >),我想知道是否可以从JavaScript(代码< >QWebVIEW >)中发出 QMousEvg/,并用C++? 我已经知道如何从JS(反之亦然)调用C++方法,但我问我是否能够生成/发出包含 QMousEvgs/COD>的事件(这是非常重要的,因为当前全局位置的光标).,javascript,c++,qt4,Javascript,C++,Qt4,几乎可以肯定,您不能这样做,因为cpp驻留在运行javascript之外的另一个内存中。然而,我不知道这些工具是什么以及它们是如何设置的 处理这些问题的通常方法是通过发送字符串/xml/json对象或您自己的“脚本语言”来创建某种“中立”的中间层/通信通道。如果您将此过程自动化,通常称为“序列化对象”,这意味着将其转换为某种格式,您可以将其存储在磁盘上并在以后重建,或者将其转换为其他工具可以读取和理解的“纯文本”。对象驻留在内存中,只要应用程序之间不共享内存,它们就无法理解正在发生的事情 例如,

几乎可以肯定,您不能这样做,因为cpp驻留在运行javascript之外的另一个内存中。然而,我不知道这些工具是什么以及它们是如何设置的

处理这些问题的通常方法是通过发送字符串/xml/json对象或您自己的“脚本语言”来创建某种“中立”的中间层/通信通道。如果您将此过程自动化,通常称为“序列化对象”,这意味着将其转换为某种格式,您可以将其存储在磁盘上并在以后重建,或者将其转换为其他工具可以读取和理解的“纯文本”。对象驻留在内存中,只要应用程序之间不共享内存,它们就无法理解正在发生的事情


例如,使用您自己的“脚本语言”,始终通过自定义函数
notifyCPP(头,参数)
进行调用,其中示例为
notifyCPP(“鼠标位置更新”,“x=189;y=200”)

毕竟没那么难

首先,我向JavaScript引擎公开了我的窗口:

this->webView()->page()->mainFrame()->addToJavaScriptWindowObject(“CHtml5ApplicationViewer”,this);
然后,我在HTML代码中创建了一个简单的div,并附加了此代码来处理鼠标onClick、onMove和onDrag事件

document.getElementById(“bar”).onmousedown=function(e){
CHtml5ApplicationViewer.fakeMousePressEvent(e.pageX,e.pageY);
e、 预防默认值();
document.onmousemove=函数(e){
CHtml5ApplicationViewer.fakeMouseMoveEvent(e.screenX,e.screenY);
e、 预防默认值();
}
this.onmouseup=函数(){
document.onmousemove=null;
}
document.getElementById(“bar”).ondragstart=function(){return false;}
}
<>最后,我在C++代码中添加了两个函数来处理我的JavaScript代码:

void CHtml5ApplicationViewer::fakeMousePressEvent(int-fromBorderX,int-fromBorderY){
fromBorderPosition=QPoint(fromBorderX,fromBorderY);
}
void CHtml5ApplicationViewer::fakeMouseMoveEvent(int-dragX,int-dragY){
移动(QPoint(dragX,dragY)-从边界位置);
}
另外,确保这些函数可以从JS调用

公共:
Q_可调用的void fakeMousePressEvent(int-fromBorderX,int-fromBorderY);
Q_可调用的void fakeMouseMoveEvent(int-dragX,int-dragY);

谢谢你的回复,但是你真的不知道我问了什么,是吗?这听起来确实像是把QMOSEEVER的实际元素从JS传递到CPP,但是如果不适合我的猜测,抱歉。我的问题中有一个链接,它描述了如何从JS调用C++方法(反之亦然),除此之外,我已经说过我知道这是怎么做到的。这里的困难是生成一个QMouseEvent,其中包含事件生成时的光标位置。阅读本文并用谷歌搜索了更多内容,但仍然不明白最终要做什么。但是,也许这些帖子可以帮助你:“我刚刚找到了一个解决我所寻找问题的方法。如果你想知道我到底在问什么,请看一看。