将nativeObject转换为QObject qt5 c++

Convert nativeObject to QObject qt5 c++

本文关键字:qt5 c++ QObject nativeObject 转换      更新时间:2023-10-16

我在使用QObject时遇到问题。在我的代码中,我试图在Qt5中向Javascript添加一个对象。

#include <QtGui>
#include <QtWebKit>
#include <QApplication>
#include <QWebView>
#include <QWebFrame>
#include <QWebPage>
#include <iostream>
#include <string>
using namespace std;
class nativeObject : public QObject {
    Q_OBJECT
    public:
        string version;
};
int main(int argc, char** argv) {
    nativeObject test;
    test.version = "BETA";
    QApplication app(argc, argv);
    QWebView view;
    QWebFrame *frame = view.page()->mainFrame();
    frame->addToJavaScriptWindowObject("someNameForMyObject", &test);
    view.setUrl(QUrl("http://google.com"));
    view.show();
    return app.exec();
}

运行该代码会出现以下错误:

main.obj:-1: error: LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall nativeObject::metaObject(void)const " (?metaObject@nativeObject@@UBEPBUQMetaObject@@XZ)
main.obj:-1: error: LNK2001: unresolved external symbol "public: virtual void * __thiscall nativeObject::qt_metacast(char const *)" (?qt_metacast@nativeObject@@UAEPAXPBD@Z)
main.obj:-1: error: LNK2001: unresolved external symbol "public: virtual int __thiscall nativeObject::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@nativeObject@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
releasewebkit.exe:-1: error: LNK1120: 3 unresolved externals

我找不到任何"好的"和相关的文档,因为我对qt和C++编程非常陌生。我是否错误地申报了QObject,或者我做错了什么?

试试这个:

frame->addToJavaScriptWindowObject("someNameForMyObject", &test);

它需要QObject*,但您设置了QObject

void QWebFrame::addToJavaScriptWindowObject(const QString & name, QObject * object, ValueOwnership own = QtOwnership)

&用于获取对象的地址,因为它不是指针,您也可以将nativeObject创建为指针:

nativeObject *test = new nativeObject;

在这种情况下,

frame->addToJavaScriptWindowObject("someNameForMyObject", test);

将是有效的,因为CCD_ 10已经是指针。请注意,对于指针,我们使用->而不是.