2012-08-23 3 views
1

J'ai une table en HTML Je me soumets à un QWebView.Limitation sévère pour QWebView

La table se développe pendant le cycle de vie de l'application. Si je gère le html QString sur le côté et juste "setHtml" avec chaque mise à jour, je rencontre un problème de performance où l'ajout de 1000 lignes à la table prend quelques minutes.

N'y a-t-il pas un moyen pour moi d'accéder au HTML directement sur le QWebView et d'injecter la nouvelle ligne de table à chaque fois, en mettant à jour le HTML directement?

+0

dois-je utiliser javascript? suffit d'appeler une fonction javascript pour injecter les nouvelles lignes de la table? est-il possible d'appeler une fonction javascript de QWebView dans Qt? – JasonGenX

Répondre

1

Je crois que ce que vous voulez est d'interagir avec le QWebFrame, qui est l'objet de niveau le plus bas. Vous pouvez y accéder via: QWebView->page()->mainFrame()

Depuis le QWebFrame, vous pouvez soit utiliser evaluateJavaScript() pour envoyer simplement des extraits à la page pour l'exécution.

Ou vous pouvez enregistrer un QObject avec le cadre en utilisant addToJavaScriptWindowObject, qui relie votre code Qt et la page javascript. Vous pouvez lire more in detail here. Mais cette approche permet au javascript-side de définir une fonction comme un "slot" et de se connecter à un signal défini sur votre QObject, tel que updateTable(). Ensuite, chaque fois que vous faites quelque chose du côté de Qt et que vous émettez les données avec ce signal, le javascript l'attrape et le gère.

Qt

QWebFrame *frame = myWebPage->mainFrame(); 
frame->addToJavaScriptWindowObject("tableHandler", tableHandlerObject); 

javscript

function handleTableUpdate() { ... } 
... 
tableHandler.updateReady.connect(handleTableUpdate);