我正在尝试在QT上构建应用程序。这是应用程序。
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QWebFrame>
#include <QWebPage>
#include <QWebView>
class MyJavaScriptOperations : public QObject {
Q_OBJECT
public:
Q_INVOKABLE void sumOfNumbers(int a, int b) {
qDebug() << a + b;
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWebView *view = new QWebView();
view->resize(400, 500);
view->page()->mainFrame()->addToJavaScriptWindowObject("myoperations", new MyJavaScriptOperations);
//view->load(QUrl("file:///path/to/my/index.html"));
view->show();
return a.exec();
}
我有以下专业档案。
QT += core gui
QT += widgets
QT += webkit
TARGET = JS_DEMO1
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
构建时出现以下错误。
(。text.startup + 0x8c): - 1:错误:未定义引用`vtable for MyJavaScriptOperations&#39;
答案 0 :(得分:2)
因此,error: undefined reference to vtable
的可能原因和相应的解决方案是:
QObject's
完成后,某个类已被声明为Q_OBJECT
继承人并且已moc
宏。再次moc
。.pro
中,或者在标题中出现 Q_OBJECT
之后已添加到标题中。重建项目,或者(简短的方法)更新.pro
的时间戳并再次生成Build。例如,更新所有项目的时间戳的简短方法是find . -name '*.pro' -exec touch '{}' \;
后两者似乎会导致你的情况。
希望这有帮助。
答案 1 :(得分:1)
如果在头文件外使用Q_OBJECT
宏,则需要添加#include "<BASENAME>.moc"
。这将告诉qmake
在文件上运行moc
以生成QObject(信号/插槽等)的代码。
因此,在您的情况下,只需将#include "main.moc"
放在main.cpp
文件的末尾并重建项目。