【问题标题】:signal-slot in Qt : emit is located in the slot methodQt 中的 signal-slot :emit 位于 slot 方法中
【发布时间】:2011-11-28 22:55:53
【问题描述】:

我正在读一本关于 Qt 的书,在一个信号槽函数的例子中,有一个位于 slot 方法内的 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"));
}

谢谢

【问题讨论】:

    标签: qt signals-slots


    【解决方案1】:

    什么是网页视图? (是同一类型吗?)

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

    如果是的话

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

    那将是一个无限循环

    【讨论】:

    • 哎呀,是的,你是对的,但是在调用插槽时仍然至少调用一次发出,我不知道为什么,文本说:“我们发出自己的 urlChanged () 信号是为了方便 BrowserWindow 用户”,但我不明白这真正意味着什么,因为唯一的“urlChanged”信号设置为 webview 实例(webView 的类型为 QWebView)......
    • 这个发射将用于任何可能连接到 BrowserWindow 的插槽。某些东西可能会更改 BrowserWindow url(例如,单击一个按钮),然后 BrowserWindow 会因为它被更改而发出,并且它的发出可以触发管道中的另一个插槽(即,激活不同的按钮)。如果没有 BrowserWindow 发射,我们无法将它们链接在一起 - 但有了它,我们可以。
    • 谢谢 Will,好的,问题是没有“connect”方法可以监听“this”(BrowserWindow)发出的声音,但是我明白原理,谢谢你的帮助!干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    相关资源
    最近更新 更多