gpt4 book ai didi

javascript - 从 JavaScript 传递给 Qt/C++ 对象的字符串

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:51 25 4
gpt4 key购买 nike

我被困在 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

如果我只是将数据作为文字传递,那么一切都可以正常工作,例如

myObject.setData('10.10.0.1');

myObject.data = '10.10.0.1';

我不明白为什么传递文字有效但变量无效,'url'变量应该是字符串类型。

最佳答案

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

所以字符串传递有效(在某些情况下)。

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

关于javascript - 从 JavaScript 传递给 Qt/C++ 对象的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865715/

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