C++ Qt:无法从javascript调用共享对象方法/属性
对于这个问题,我尝试了与Vicky Chijwani完全相同的答案 一切都很好,但我无法调用jshelper的任何方法或属性 请看一下我的代码 myclass.hC++ Qt:无法从javascript调用共享对象方法/属性,c++,qt,qtwebengine,C++,Qt,Qtwebengine,对于这个问题,我尝试了与Vicky Chijwani完全相同的答案 一切都很好,但我无法调用jshelper的任何方法或属性 请看一下我的代码 myclass.h class MyClass : public QObject { Q_OBJECT public: MyClass(QObject *parent = 0); void print(); int num; signals: public slots: }; class MyWebEngineVi
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = 0);
void print();
int num;
signals:
public slots:
};
class MyWebEngineView : public QWebEngineView
{
public:
MyWebEngineView(QWidget *parent);
MyClass helper;
};
myclass.cpp
MyClass::MyClass(QObject *parent) : QObject(parent)
{
num=100;
}
void MyClass::print()
{
QMessageBox bx;
bx.exec();
}
MyWebEngineView::MyWebEngineView(QWidget *parent): QWebEngineView(parent)
{
QWebChannel *channel = new QWebChannel(page());
channel->registerObject(QStringLiteral("jshelper"), &helper);load(QUrl::fromLocalFile(QFileInfo("../html/index.html").absoluteFilePath()));
page()->setWebChannel(channel);
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
view = new MyWebEngineView(this);
view->setGeometry(10, 10, 500, 500);
view->load(QUrl::fromLocalFile(QFileInfo("../html/index.html").absoluteFilePath()));
}
mywebengineview.h
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = 0);
void print();
int num;
signals:
public slots:
};
class MyWebEngineView : public QWebEngineView
{
public:
MyWebEngineView(QWidget *parent);
MyClass helper;
};
mywebengineview.cpp
MyClass::MyClass(QObject *parent) : QObject(parent)
{
num=100;
}
void MyClass::print()
{
QMessageBox bx;
bx.exec();
}
MyWebEngineView::MyWebEngineView(QWidget *parent): QWebEngineView(parent)
{
QWebChannel *channel = new QWebChannel(page());
channel->registerObject(QStringLiteral("jshelper"), &helper);load(QUrl::fromLocalFile(QFileInfo("../html/index.html").absoluteFilePath()));
page()->setWebChannel(channel);
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
view = new MyWebEngineView(this);
view->setGeometry(10, 10, 500, 500);
view->load(QUrl::fromLocalFile(QFileInfo("../html/index.html").absoluteFilePath()));
}
main window.cpp
MyClass::MyClass(QObject *parent) : QObject(parent)
{
num=100;
}
void MyClass::print()
{
QMessageBox bx;
bx.exec();
}
MyWebEngineView::MyWebEngineView(QWidget *parent): QWebEngineView(parent)
{
QWebChannel *channel = new QWebChannel(page());
channel->registerObject(QStringLiteral("jshelper"), &helper);load(QUrl::fromLocalFile(QFileInfo("../html/index.html").absoluteFilePath()));
page()->setWebChannel(channel);
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
view = new MyWebEngineView(this);
view->setGeometry(10, 10, 500, 500);
view->load(QUrl::fromLocalFile(QFileInfo("../html/index.html").absoluteFilePath()));
}
最后是javascript
<script type="text/javascript">
var jshelper;
document.addEventListener("DOMContentLoaded", function () {
new QWebChannel(qt.webChannelTransport, function(channel) {
alert('ok');
// all published objects are available in channel.objects under
// the identifier set in their attached WebChannel.id property
jshelper = channel.objects.jshelper;
alert( jshelper.num );
jshelper.print();
});
});
</script>
我的代码有什么问题,我试图在4天左右修复这个问题,但我无法修复它 我知道在QWebKit下,我必须使成员函数如下所示:
public slots:
Q_INVOKABLE void print();
我知道在QWebKit下,我必须使成员函数如下所示:
public slots:
Q_INVOKABLE void print();
我知道我很晚才提供注释,但是如果有问题的函数是在slots部分声明的,那么您不必使用Q_INVOKABLE。如果有多个函数,则键入的内容会稍微减少
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = 0);
slots:
void print();
}
我知道我很晚才提供注释,但是如果有问题的函数是在slots部分声明的,那么您不必使用Q_INVOKABLE。如果有多个函数,则键入的内容会稍微减少
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = 0);
slots:
void print();
}
console.log(channel.objects.jshelper)
,或console.log(channel.objects)
说什么?jshelper:_uid:_u:“jshelper”objectSignals:objectpropertycache\u uu:ObjectdeleteLater:function(){销毁:Objectconnect:function(callback){断开:function(callback){proto:ObjectobjectName:(…)get objectName:function(){set objectName:function(value){objectNameChanged:ObjectpropertyUpdate:function(signals,propertyMap)SignalEmissed:function(signalName,signalArgs)unwrapProperties:function()unwrapQObject:function(response)__proto\uuuu:QObjectSo nonum
或print
功能清晰。是的,我缺少了什么..?我无法弄清楚。console.log(channel.objects.jshelper)或console.log(channel.objects)
说什么?jshelper:\uuuu id\uuuu:“jshelper”objectSignals:Object\uu属性缓存:ObjectdeleteLater:function(){销毁:Objectconnect:function(callback){断开连接:function(callback){proto:ObjectobjectName:(…)get objectName:function(){设置objectName:function(value){objectName更改:ObjectpropertyUpdate:function(signals,propertyMap)signalEmissed:function(signalName,signalArgs)unwrapProperties:function()unwrapQObject:function(回答)uuu proto_uuuuu:QObjectSo nonum
或print
功能清晰。是的,我遗漏了什么?我想不出来。谢谢你。qtwebengine也需要Q_可调用。我从未尝试过这个。:(现在它工作了。谢谢你。qtwebengine也需要Q_可调用。我从未尝试过这个。)。