2011-11-28 79 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