Qt: avere problemi a rispondere a QWebView :: LinkClicked (qurl) - scanalatura emissione del segnale
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?
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.