字符串从JavaScript传递到Qt/ c++对象

String passing from JavaScript to Qt/C++ object

本文关键字:Qt c++ 对象 JavaScript 字符串      更新时间:2023-10-16

我被困在Windows上的QtWebKit桥问题上,我跑完了选项。我不知道使用的确切代码,但它就像下面的东西。

c++

class MyObject : QWidget {
    Q_OBJECT
public:
    QString data() const;
    void setData(QString);
    Q_PROPERTY(QString data READ data WRITE setData)
};
/* ... */
MyObject myObject;
frame->addToJavaScriptWindowObject("myObject", &myObject);
JavaScript

function drop(e) {
    var url = e.dataTransfer.getData('url');
    //alert(url);   // Displays url correctly
    myObject.data = url;    // Assigns url to C++ object myObject
}

警告框正确显示字符串值,例如10.10.0.1。setData上的参数给了我字符串"1"。如果我在那个地址查看内存,我看到内存中的完整url(格式化为UTF-32(每个字符4字节)),但无论我尝试(toStdString, toAscii, utf16 -只是为了获得明智的数据)我似乎无法获得/使用整个字符串。

我事件认为也许调试器在耍我,所以我把数据传递给实际需要这些数据的方法(也使用了QString),这一切都可能工作-但遗憾的是没有。

即使我使MyObject::setData Q_INVOKABLE并直接调用setData,我也会得到相同的结果行为:

myObject.setData(url);  // Assigns url to C++ object myObject

如果我只是把数据作为文字传递,所有DOES都能正常工作,比如

myObject.setData('10.10.0.1');

myObject.data = '10.10.0.1';

我不明白为什么传递一个文字工作,但一个变量不,'url'变量应该是字符串类型。

我有一部分在那里。字符串传递按预期工作。然而,c++对象是嵌入在网页上并包装ActiveX (ActiveQt)对象的。为此,我看到过一些页面,其中创建了一个继承自q网页的类。这里有一个createPlugins方法,它要求QUiLoader为您构造小部件(或者您可以使用Qt Metatype系统)。我的c++对象是注册的。当我在我的WebView(使用setPage)上使用这个自定义网页时,字符串被错误地传递进来。当我禁用调用setPage时,字符串会正确传递。

所以字符串传递工作(在某些条件下)。

我为此创建了一个新问题:Qt Webkit bridge ActiveQt string