Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt:emit中的信号插槽位于插槽方法中_Qt_Signals Slots - Fatal编程技术网

Qt:emit中的信号插槽位于插槽方法中

Qt:emit中的信号插槽位于插槽方法中,qt,signals-slots,Qt,Signals Slots,我正在读一本关于Qt的书,在一个信号槽函数的例子中,有一个位于槽函数内的emit方法。。。所以这变成了一个无限循环。。。我真的不明白如何阻止它: connect(webView, SIGNAL(urlChanged(const QUrl&)), this, SLOT(urlChange(const QUrl&)); 然后我们就有了这个功能: void BrowserWindow::urlChange(const QUrl &url) { emit ur

我正在读一本关于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"));
}
谢谢

什么是webView?(是同一种吗?)

connect正在将一个实例连接到此插槽-它可能没有连接自己的实例

如果是

connect(this, SIGNAL(urlChanged(const QUrl&)), 
        this, SLOT(urlChange(const QUrl&));
那将是一个无限循环

什么是webView?(是同一种吗?)

connect正在将一个实例连接到此插槽-它可能没有连接自己的实例

如果是

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

那将是一个无限循环

oops,是的,你是对的,但是当插槽被调用时,仍然至少有一次调用了emit,我不知道为什么,文本说:“我们发出自己的urlChanged()信号以方便BrowserWindow用户”,但我不明白这到底意味着什么,因为只有“urlChanged”信号被设置为webview实例(webview类型为QWebView)…此发射将用于可能连接到BrowserWindow的任何插槽。某些东西可能会更改BrowserWindow url(例如,单击一个按钮),然后BrowserWindow将发出,因为它已更改,其发出可能会触发管道中的另一个插槽(即,激活另一个按钮)。如果没有BrowserWindow emit,我们无法将这些链接在一起,但是有了它,我们可以。谢谢Will,好的,问题是没有“连接”方法可以从“这个”(BrowserWindow)监听这个emit,但是好的,我理解这个原理,谢谢你的帮助!CheareSoops,是的,你是对的,但是当插槽被调用时,仍然至少有一次调用了emit,我不知道为什么,文本说:“我们发出我们自己的urlChanged()信号以方便BrowserWindow用户”,但我不明白这到底意味着什么,因为唯一的“urlChanged”信号被设置为webview实例(webView类型为QWebView)…此发射适用于可能连接到BrowserWindow的任何插槽。可能会有某些内容更改BrowserWindow url(例如,单击按钮),然后BrowserWindow将发射,因为它已更改,其发射可能会触发管道中的另一个插槽(即,激活其他按钮)。没有BrowserWindow emit,我们无法将这些链接在一起-但是有了它,我们可以。谢谢Will,好的,问题是没有“连接”方法可以从“这个”(BrowserWindow)中侦听此emit,但好的,我理解其原理,感谢您的帮助!干杯