2012-05-26 2 views
1

Je suis nouveau dans ce Q & Un site et dans le monde Qt. Je veux intégrer une page web dans mon application. Je veux avoir une valeur d'entrée d'étiquette, mais ça ne marche pas, pouvez-vous m'aider?QWebView :: setUrl ne fonctionne pas

C'est le constructeur de ma classe:

MainWindow::MainWindow(QWidget *parent) 
: QWidget(parent) 
{ 
QVBoxLayout *container = new QVBoxLayout; 


QWebView *cart = new QWebView(); 
QWebPage *page = new QWebPage(); 

cart->setUrl(QUrl("http://www.mysite.com/")); 


QWebFrame *main = cart->page()->mainFrame(); 

QWebElement document = main->documentElement(); 
QWebElement t1 = document.findFirst("input[name=myname]"); 
QString storedText = t1.attribute("value", "defaultvalue"); 

qDebug() << "T1 value:" << storedText; 
storedText = t1.attributeNS(QString::Null(), "value"); 
qDebug() << "T1 ns value:" << storedText; 
QVariant v = t1.evaluateJavaScript("this.value"); 
qDebug() << "Javascript value:" << v.toString(); // ok. returns c 

container->addWidget(cart); 

setLayout(container); 
this->show(); 
} 

La page Web apparaît dans mon application, mais la sortie sur la ligne de commande est la suivante:

T1 value: "" 
T1 ns value: "" 
Javascript value: "" 

La storedText variable a la valeur ""

Répondre

5

Cest parce qu'après avoir défini l'URL en utilisant QWebView::setUrl(), vous devez attendre QWebView::loadFinished(bool ok)signal avant de récupérer des données. Voir le documentation.

Déplacez donc votre code de récupération pour les informations de l'élément dans un slot pour QWebView::loadFinished()signal.

+0

Merci beaucoup, maintenant ça marche! J'imaginais que c'était ça, mais je ne savais pas que j'avais besoin d'un SIGNAL. Encore merci. – user1419205

+0

Vous êtes les bienvenus .. Il suffit de marquer cette réponse comme correcte .. :) – Ammar

Questions connexes