gpt4 book ai didi

javascript - QWebFrame addToJavaScriptWindowObject() 对象在 Javascript 中未定义

转载 作者:行者123 更新时间:2023-11-29 16:24:49 29 4
gpt4 key购买 nike

我已经开始再次深入研究 C++ 和 Qt,并且一直在研究 WebKit Javascript/Qt 绑定(bind)。我已经让所有移动部件正常工作,除了我的 QObject 子类在 Javascript 端“未定义”。这是我遇到问题的简单测试应用程序:

我的主窗口实现:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

// instantiate a webview
QWebView *webview = new QWebView(this);
webview->setGeometry(0, 0, 400, 300);
webview->setUrl(QUrl("file://localhost/Users/kyle/Sites/tests/qt/index.html"));

// instantiate and attach our QObject
hello *h = new hello();

QWebFrame *frame = webview->page()->mainFrame();
frame->addToJavaScriptWindowObject("Hello", h);

// show the window
webview->show();
}

Hello.cpp

...snip...

QString hello::say()
{
return QString("Kyle");
}

你好.h

...snip includes...

class hello : public QObject
{
Q_OBJECT

public:
hello();
Q_INVOKABLE QString say();

};

上面提到的index.html文件做了一个简单的alert(Hello.say())调用,但是执行typeof Hello,我得到了未定义。

我对 C++ 有点生疏,而且对 Qt 还很陌生,所以我确信这是一个菜鸟错误,但我被难住了。

最佳答案

任何时候都无法在页面中插入对象。你应该把那一行:

frame->addToJavaScriptWindowObject("Hello", h);

在连接到 javaScriptWindowObjectCleared() signal 的插槽中QWebFrame 并移动一些代码,以便您可以从该插槽访问该框架。

另请参阅Form Extractor example包含在 Qt 中。

关于javascript - QWebFrame addToJavaScriptWindowObject() 对象在 Javascript 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7141730/

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