问:在QWebView :: linkClicked(QUrl)上遇到问题 - 插槽信号问题

时间:2009-05-11 08:09:55

标签: c++ qt signals

我对Qt很新。

我想回复linkClicked中的QWebView

我试过像这样连接:

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

执行此事件处理的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

您声明它现在有效,因为您已将QObject::connect更改为connect。现在我不是百分之百,但我相信这是因为通过调用connect,您正在调用与作为应用程序一部分的对象关联的方法。即它就像在做this->connect(...)。这样,它与现有对象相关联 - 而不是调用对您的应用程序一无所知的静态方法QObject::connect

对不起,如果不清楚,希望我明白了!

答案 1 :(得分: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);

它有效。注意使其起作用的区别 - 第三个参数。您在第二个代码段中使用了 this ,而在第一个代码段中使用了 MainWindow

阅读this以了解信号和插槽机制的工作原理以及如何正确实施它。

答案 2 :(得分:1)

我将QObject::connect更改为仅connect并且有效。

所以这段代码可行:

connect(ui->webView,SIGNAL(linkClicked(const QUrl)),this,SLOT(linkClicked(const QUrl)),Qt::DirectConnection);

但我不知道为什么?