Qt:tener problemas de responder en QWebView::linkClicked(QUrl) - ranura de la señal de problema

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

  •  21-08-2019
  •  | 
  •  

Pregunta

Soy bastante nuevo con Qt.

Quiero responder a linkClicked en QWebView.

He intentado conectar como este:

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

Pero el que estaba el error: C:/Documents and Settings/irfan/My Documents/browser1/mainwindow.cpp:9: error: expected primary-expression before ',' token

Cuando hago esto con interfaz de usuario de Edición de las Señales de Ranuras:

Tengo en el archivo de encabezado de la declaración de la ranura:

void linkClicked(QUrl &url);

en la fuente de archivo cpp :

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

Cuando ejecuto este se compila y se ejecuta, pero tengo una advertencia :

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

¿Cuál es la forma correcta de hacer este evento de manipulación?

¿Fue útil?

Solución 3

He cambiado QObject::connect a sólo connect y funciona.

Por lo que este código funciona:

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

Pero no sé por qué?

Otros consejos

Usted afirma que ahora funciona porque ha cambiado QObject::connect a connect. Ahora no estoy 100% en esto, pero creo que la razón de esto es que llamando this->connect(...), que está llamando el método asociado con un objeto que forma parte de su aplicación. es decir, es como hacer <=>. De esta manera, se asocia con un objeto existente -. En lugar de llamar al método estático <=> que no sabe nada acerca de su aplicación

Lo siento si eso no es clara, con suerte me dieron el punto a través!

El uso de QObject :: connect () y connect () es igual en este contexto. Creo

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

fue llamado de una función dentro de la clase MainWindow. Por eso, cuando se trató

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

funciona. Nótese la diferencia de que hacer que funcione - el tercer parámetro. Que utilizó este en el segundo fragmento, en el que utilizó MainWindow en el primer fragmento.

este saber cómo las señales y ranuras funcionamiento del mecanismo y cómo aplicar correctamente a él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top