Esiste un modo per esporre un oggetto/funzione C++ a JavaScript in esecuzione nel browser QtWebKit in Qt? È possibile esporre oggetti ActionScript al codice JS in esecuzione all'interno del browser WebKit in Adobe AIR: sto cercando funzionalità simili in Qt.Esporre l'oggetto C++ su Javascript in Qt
risposta
Sì. Dai un'occhiata a this. Dovrebbe essere un buon inizio.
EDIT: collegamento funziona, ma solo nel caso il link ROMPE ANCORA [Link] da Richard Moore ...
Una domanda che ho visto venire più volte sul #qt e QT-interesse è come aggiungere le API personalizzate (specifiche dell'applicazione) a quelle disponibili per impostazione predefinita in QtWebKit. Questo è in realtà piuttosto facile (una volta che sai come) come mostrerò qui sotto. Questo post mostrerà un semplice esempio di come rendere disponibile un oggetto da javascript, inclusi i metodi di chiamata sull'oggetto e i valori di ritorno da C++.
Ci sono due cose che si ha realmente bisogno di sapere per eseguire questa integrazione, il primo è il metodo addToJavaScriptWindowObject() di QWebFrame, questo permette farà la QObject specificato visibile da javascript. La seconda cosa che devi sapere è che gli oggetti pubblicati in in questo modo svaniranno ogni volta che l'oggetto della finestra JavaScript viene cancellato - ie. ogni volta che l'utente naviga verso una nuova pagina. Per evitare che questo causi problemi , QWebFrame fornisce un segnale che ti dice quando l'oggetto è eliminato consentendo di aggiungere nuovamente l'API personalizzata. Questo è in realtà molto più semplice di !
Il nucleo di questo è davvero attuata in due metodi nell'esempio, sono illustrato di seguito:
void MyApi::setWebView(QWebView *view)
{
QWebPage *page = view->page();
frame = page->mainFrame();
attachObject();
connect(frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(attachObject()));
}
void MyApi::attachObject()
{
frame->addToJavaScriptWindowObject(QString("MyApi"), this);
}
Questo codice è tutto ciò che è necessario al fine di rendere tutto il slot pubblici dell'oggetto MyApi visibile a javascript. La classe MyApi offre due slot pubblici: (yes, slot possono restituire le cose)
public slots:
void doSomething(const QString ¶m);
int doSums(int a, int b);
La prima slot i registri semplicemente un messaggio per l'output di debug, il secondo restituisce la somma dei suoi due argomenti . Si chiamano da javascript come questo:
MyApi.doSomething('Hello from JS page 2!!!!');
sum = MyApi.doSums(2, 3);
alert('C++ says the sum is ' + sum);
E questo è tutto ciò che devi fare! È possibile scaricare il codice da>http://xmelegance.org/devel/qtwebkitextension.tar.gz.
Purtroppo questo esempio non è funzionale in QT5. Qualche possibilità di aggiornamento o devo aprire un'altra domanda? – Alex
- 1. UIWebView Esporre Objective C a JavaScript
- 2. Descrizione Oggetto C++ per javascript nel Qt con QtWebEngine
- 3. Esporre un'API C++ a C#
- 4. Gerarchia in Qt [C++]
- 5. Esporre le funzioni Dart a javascript
- 6. opzione DHCP in Qt/C++
- 7. Come esporre i join C++ a Lua
- 8. Come esporre le strutture C++ per i calcoli in Qml
- 9. Tipo decimale in Qt (C++)
- 10. C# esporre a COM - Interfaccia eredità
- 11. Qt: classi Qt vs. standard C++
- 12. videoteche Qt C++
- 13. Codice C++ di test unitario (non-Qt) in Qt Creator?
- 14. Come esporre una porta UDP su Docker?
- 15. Proprietà java: esporre o non esporre?
- 16. Qt/C++: disegno efficiente
- 17. Usa C++ 11 in Qt Creator
- 18. Builder Embarcadero C++ + FireMoneky vs Qt
- 19. Qt QML da QML a C++ QImage su Android
- 20. Come esporre una trasformazione di stile dinamica usando Javascript?
- 21. Esporre funzioni componenti in ES6
- 22. Definizioni multiple di C++ Qt
- 23. Incorporare Python 3.4 in un'applicazione Qt C++?
- 24. Segnale C++ allo slot QML in Qt
- 25. Come catturare Ctrl + C su Windows e Linux con Qt
- 26. Come implementare MVVM di tipo WPF in Qt/C++/QML?
- 27. Effetto sfocatura su QWidget in Qt
- 28. Impostazione OpenCV in QT su OSX
- 29. Applicazione C++ che utilizza qt, come includere gnuplot
- 30. C++ Qt return empty QString
Grazie per le informazioni! – BlueSilver