Qt: ayant des difficultés à répondre à QWebView :: LinkClicked (qurl) - émission de signal de fente

StackOverflow https://stackoverflow.com/questions/847157

  •  21-08-2019
  •  | 
  •  

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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top