signal-slot в Qt: emit находится в методе slot

я читаю книгу о Qt, в одном из примеров функции сигнального слота есть метод emit, расположенный внутри метода слота... Так что это становится бесконечным циклом... я действительно не понимаю, как чтобы остановить это:

connect(webView, SIGNAL(urlChanged(const QUrl&)), 
    this, SLOT(urlChange(const QUrl&));

и тогда у нас есть функция:

void BrowserWindow::urlChange(const QUrl &url)
{
    emit urlChanged(url);
    progressLabel->setText(tr("Loading"));
}

Спасибо


person Paul    schedule 28.11.2011    source источник


Ответы (1)


Что такое веб-просмотр? (это тот же тип?)

Соединение подключает один экземпляр к этому слоту — возможно, он не подключается к своему собственному экземпляру.

Если бы это было

connect(this, SIGNAL(urlChanged(const QUrl&)), 
        this, SLOT(urlChange(const QUrl&));

то это будет бесконечный цикл

person Will    schedule 28.11.2011
comment
упс, да, вы правы, но по крайней мере один раз при вызове слота все равно вызывается emit, и я не знаю почему, в тексте говорится: мы испускаем собственный сигнал urlChanged() для удобства пользователей BrowserWindow но я не понимаю, что это на самом деле означает, поскольку единственный сигнал urlChanged установлен для экземпляра веб-просмотра (webView имеет тип QWebView)... - person Paul; 29.11.2011
comment
Этот выброс будет для любых слотов, которые могут быть подключены к BrowserWindow. Что-то может изменить URL-адрес BrowserWindow (скажем, нажатие кнопки), а затем BrowserWindow выдаст сообщение, потому что оно было изменено, и его выдача может вызвать другой слот в конвейере (т. е. активировать другую кнопку). Без испускания BrowserWindow мы не можем связать их вместе, но с ним можем. - person Will; 29.11.2011
comment
Спасибо, Уилл, хорошо, дело в том, что нет метода подключения, который прослушивает это излучение из этого (BrowserWindow), но хорошо, я понял принцип, спасибо за вашу помощь! Ваше здоровье - person Paul; 29.11.2011