Суть этого действительно реализована в двух методах, которые
показано ниже:
void MyApi::setWebView( QWebView *view )
{
QWebPage *page = view->page();
frame = page->mainFrame();
attachObject();
connect(frame, &QWebFrame::javaScriptWindowObjectCleared, this, &MyApi::attachObject);
// old approach
//connect( frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(attachObject()) );
}
void MyApi::attachObject()
{
frame->addToJavaScriptWindowObject( QString("MyApi"), this );
}
Этот код - все, что вам нужно для того, чтобы сделать все открытые слоты
Объект MyApi видимый для JavaScript. Класс MyApi предоставляет два открытых слота:
public slots:
void doSomething( const QString ¶m );
int doSums( int a, int b );
Первый слот просто записывает сообщение на выход отладки, второй возвращает
сумма двух аргументов (да, слоты могут возвращать вещи!). Они называются
из JavaScript, как это:
MyApi.doSomething( 'Hello from JS page 2!!!!' );
sum = MyApi.doSums( 2, 3 );
alert( 'C++ says the sum is ' + sum );
Приведенный выше код был протестирован в QT5.5, и обратите внимание, что все методы должны быть помещены в раздел "public slots".