2011-11-28 100 views
0

我正在讀一本關於Qt的書,在信號插槽函數的一個示例中,位於插槽方法內部的emit方法...因此,這將成爲無限循環......我真的不知道如何阻止它: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")); 
} 

感謝

回答

4

什麼是web視圖? (是否是同一類型?)

connect將一個實例連接到此插槽 - 它可能不連接其自己的實例。

如果是

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

那麼這將是一個無限循環

+0

哎呀,是你說的沒錯,但仍有發出調用的時候,槽被調用至少一次,和我'不知道爲什麼,文字說:「我們發出自己的urlChanged()信號作爲BrowserWindow用戶的方便」但我不明白這是什麼意思,因爲唯一的「urlChanged」信號設置爲webview實例(webView是QWebView的類型)... – Paul

+0

這個發光將用於可能連接到BrowserWindow的任何插槽。有些東西可能會改變BrowserWindow網址(比如說,點擊一個按鈕),然後BrowserWindow會發射,因爲它已經改變了,它的發射可以觸發管道中的另一個插槽(即激活一個不同的按鈕)。如果沒有BrowserWindow發出,我們不能將這些鏈接在一起 - 但是有了它,我們就可以。 – Will

+0

感謝Will,好吧,事情是沒有「連接」方法,這是聽到這從「this」(BrowserWindow)發出,但沒關係,我明白了原則,感謝您的幫助!乾杯 – Paul