Qt: avere problemi a rispondere a QWebView :: LinkClicked (qurl) - scanalatura emissione del segnale

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

  •  21-08-2019
  •  | 
  •  

Domanda

Sono abbastanza nuovo con Qt.

Voglio rispondere alle linkClicked in QWebView.

Ho provato a collegare in questo modo:

QObject::connect(ui->webView, SIGNAL(linkClicked(QUrl)),
                 MainWindow,SLOT(linkClicked(QUrl)));

Ma mi stavo errore: C:/Documents and Settings/irfan/My Documents/browser1/mainwindow.cpp:9: error: expected primary-expression before ',' token

Quando faccio questo con UI Editing Segnali Slot:

ho in dichiarazione di file di intestazione della fessura:

void linkClicked(QUrl &url);

nel file di origine cpp:

void MainWindow::linkClicked(QUrl &url)
{
   QMessageBox b;
   b.setText(url->toString());
   b.exec();
}

Quando ho eseguito questo si compila e funziona, ma ha ottenuto un avvertimento:

Object::connect: No such slot MainWindow::linkClicked(QUrl) 
  in ui_mainwindow.h:100

Qual è il corretto modo di fare questo la gestione degli eventi?

È stato utile?

Soluzione 3

Ho cambiato QObject::connect solo connect e funziona.

Quindi, questo codice funziona:

connect(ui->webView,SIGNAL(linkClicked(const QUrl)),this,SLOT(linkClicked(const QUrl)),Qt::DirectConnection);

Ma io non so perché?

Altri suggerimenti

Lei afferma che ora funziona perché si è modificato QObject::connect a connect. Ora io non sono al 100% su questo, ma credo che la ragione di questo è che chiamando this->connect(...), si chiama il metodo associato a un oggetto che fa parte della vostra applicazione. vale a dire che è come fare <=>. In questo modo, è associato a un oggetto esistente -. Al contrario di chiamare il metodo statico <=> che non sa nulla l'applicazione

Scusate se questo non è chiaro, si spera ho ottenuto il punto attraverso!

Utilizzando QObject :: Connect () e connect () è lo stesso in questo contesto. Credo

QObject::connect(ui->webView,SIGNAL(linkClicked(QUrl)),
                 MainWindow,SLOT(linkClicked(QUrl)));

è stato chiamato da una funzione all'interno della classe MainWindow. Ecco perché quando si è tentato

connect(ui->webView,SIGNAL(linkClicked(const QUrl)),
        this,SLOT(linkClicked(const QUrl)),Qt::DirectConnection);

funziona. Si noti la differenza che farlo funzionare - il terzo parametro. Hai usato questo nel secondo frammento di, dove, come si è utilizzato MainWindow nel primo snippet.

questo per sapere come segnali e slot opere meccanismo e come implementare correttamente esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top