Qt: возникают проблемы при ответе на QWebView :: linkClicked (QUrl) - проблема с сигналом слота - PullRequest
1 голос
/ 11 мая 2009

Я довольно новичок в Qt.

Я хочу ответить на linkClicked в QWebView.

Я пытался подключиться так:

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

Но я получил ошибку: C:/Documents and Settings/irfan/My Documents/browser1/mainwindow.cpp:9: error: expected primary-expression before ',' token

Когда я делаю это, используя пользовательский интерфейс редактирования слотов сигналов:

У меня в заголовочном файле объявление слота:

void linkClicked(QUrl &url);

в исходном cpp-файле:

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

Когда я запускаю это, он компилируется и запускается, но получает предупреждение:

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

Как правильно обрабатывать события?

Ответы [ 3 ]

2 голосов
/ 11 мая 2009

Вы заявляете, что теперь это работает, потому что вы изменили QObject::connect на connect. Теперь я не на 100% в этом, но я считаю, что причина этого в том, что, вызывая connect, вы вызываете метод, связанный с объектом, который является частью вашего приложения. то есть это все равно что делать this->connect(...). Таким образом, он связан с существующим объектом - в отличие от вызова статического метода QObject::connect, который ничего не знает о вашем приложении.

Извините, если неясно, надеюсь, я все понял!

2 голосов
/ 11 мая 2009

Использование QObject :: connect () и connect () одинаково в этом контексте. Я верю

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

был вызван из функции внутри класса MainWindow. Вот почему, когда вы пытались

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

это работает. Обратите внимание на разницу, которая заставляет его работать - третий параметр. Вы использовали this во втором фрагменте, где вы использовали MainWindow в первом фрагменте.

Прочитайте это , чтобы узнать, как работает механизм сигналов и слотов и как правильно его реализовать.

1 голос
/ 11 мая 2009

Я изменил QObject::connect только на connect, и это работает.

Итак, этот код работает:

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

Но я не знаю почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...