Qt: ayant des difficultés à répondre à QWebView :: LinkClicked (qurl) - émission de signal de fente
Question
Je suis assez nouveau avec Qt.
Je veux répondre à dans linkClicked
QWebView
.
J'ai essayé connecter comme ceci:
QObject::connect(ui->webView, SIGNAL(linkClicked(QUrl)),
MainWindow,SLOT(linkClicked(QUrl)));
Mais je recevais erreur: C:/Documents and Settings/irfan/My Documents/browser1/mainwindow.cpp:9: error: expected primary-expression before ',' token
Quand je fais cela en utilisant l'interface utilisateur Modification des signaux Machines à sous:
J'ai dans la déclaration de fichier d'en-tête de la fente:
void linkClicked(QUrl &url);
dans le fichier cpp source:
void MainWindow::linkClicked(QUrl &url)
{
QMessageBox b;
b.setText(url->toString());
b.exec();
}
Quand je lance ce qu'il compile et fonctionne, mais a reçu un avertissement:
Object::connect: No such slot MainWindow::linkClicked(QUrl)
in ui_mainwindow.h:100
Quelle est une bonne façon de gérer faire cet événement?
La solution 3
J'ai changé seulement QObject::connect
et cela fonctionne connect
.
Donc, ce code fonctionne:
connect(ui->webView,SIGNAL(linkClicked(const QUrl)),this,SLOT(linkClicked(const QUrl)),Qt::DirectConnection);
Mais je ne sais pas pourquoi?
Autres conseils
Vous dites que cela fonctionne maintenant parce que vous avez changé à QObject::connect
connect
. Maintenant, je ne suis pas à 100% sur cela, mais je crois que la raison est que en appelant this->connect(...)
, vous appelez la méthode associée à un objet qui fait partie de votre demande. à-dire qu'elle est comme faire <=>. De cette façon, il est associé à un objet existant -. Par opposition à appeler la méthode statique qui ne connaît <=> rien sur votre demande
Désolé si ce n'est pas clair, je l'espère, je suis le point à travers!
Utilisation QObject :: connect () et connect () est la même dans ce contexte. Je crois
QObject::connect(ui->webView,SIGNAL(linkClicked(QUrl)),
MainWindow,SLOT(linkClicked(QUrl)));
a été appelé à partir d'une fonction à l'intérieur classe MainWindow. Voilà pourquoi, lorsque vous avez essayé
connect(ui->webView,SIGNAL(linkClicked(const QUrl)),
this,SLOT(linkClicked(const QUrl)),Qt::DirectConnection);
il fonctionne. Notez la différence qui le font fonctionner - le troisième paramètre. Vous avez utilisé ce dans le second extrait, où que vous avez utilisé MainWindow dans le premier extrait.
cette pour savoir comment les signaux et les créneaux horaires de travaux de mécanisme et la manière d'implémenter il.