Qt:在 QWebView::linkClicked(QUrl) 上响应时出现问题 - 插槽信号问题
Posted
技术标签:
【中文标题】Qt:在 QWebView::linkClicked(QUrl) 上响应时出现问题 - 插槽信号问题【英文标题】:Qt: having problems responding on QWebView::linkClicked(QUrl) - slot signal issue 【发布时间】:2009-05-11 08:09:54 【问题描述】:我对 Qt 很陌生。
我想在QWebView
回复linkClicked
。
我试过这样连接:
QObject::connect(ui->webView, SIGNAL(linkClicked(QUrl)),
MainWindow,SLOT(linkClicked(QUrl)));
但我遇到了错误:C:/Documents and Settings/irfan/My Documents/browser1/mainwindow.cpp:9: error: expected primary-expression before ',' token
当我使用 UI 编辑信号槽执行此操作时:
我在插槽的头文件声明中:
void linkClicked(QUrl &url);
在源 cpp 文件中:
void MainWindow::linkClicked(QUrl &url)
QMessageBox b;
b.setText(url->toString());
b.exec();
当我运行它时,它会编译并运行但收到警告:
Object::connect: No such slot MainWindow::linkClicked(QUrl)
in ui_mainwindow.h:100
进行此事件处理的正确方法是什么?
【问题讨论】:
【参考方案1】:您声明它现在可以工作,因为您将 QObject::connect
更改为 connect
。现在我不是 100% 对此,但我相信这样做的原因是通过调用 connect
,您正在调用与属于您的应用程序的一部分的对象关联的方法。即这就像在做this->connect(...)
。这样,它与现有对象相关联 - 而不是调用静态方法 QObject::connect
,后者对您的应用程序一无所知。
抱歉,如果不清楚,希望我能明白这一点!
【讨论】:
【参考方案2】:在这种情况下使用 QObject::connect() 和 connect() 是相同的。我相信
QObject::connect(ui->webView,SIGNAL(linkClicked(QUrl)),
MainWindow,SLOT(linkClicked(QUrl)));
是从 MainWindow 类中的函数调用的。这就是为什么当你尝试
connect(ui->webView,SIGNAL(linkClicked(const QUrl)),
this,SLOT(linkClicked(const QUrl)),Qt::DirectConnection);
它有效。注意使它起作用的区别-第三个参数。您在第二个 sn-p 中使用了 this,而在第一个 sn-p 中使用了 MainWindow。
阅读this 了解信号和槽机制的工作原理以及如何正确实现它。
【讨论】:
【参考方案3】:我将QObject::connect
更改为仅connect
并且它有效。
所以这段代码有效:
connect(ui->webView,SIGNAL(linkClicked(const QUrl)),this,SLOT(linkClicked(const QUrl)),Qt::DirectConnection);
但我不知道为什么?
【讨论】:
还有插槽的声明:改为使用 const... linkClicked(const QUrl &url)以上是关于Qt:在 QWebView::linkClicked(QUrl) 上响应时出现问题 - 插槽信号问题的主要内容,如果未能解决你的问题,请参考以下文章