connect() 找不到信号函数

connect() can't find signal function

我正在尝试这样设置 connect()

QObject::connect(&webControl,
                 SIGNAL(Ui::MainWindow::loadFinished(bool)),
                 &w,
                 SLOT(Ui::MainWindow::loadFinished(bool)));

main() 函数中,但它给出了错误:

QObject::connect: No such signal QWebView::Ui::MainWindow::loadFinished(bool)

wwebControl 声明如下:

MainWindow w;
QWebView webControl;

这是我的文件:

mainWindow.h

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
public slots:
    void loadFinished(bool arg1);
private:
    Ui::MainWindow *ui;
};

mainWindow.cpp

void MainWindow::loadFinished(bool arg1)
{
}

为什么我会收到这个错误,我该如何解决?

我建议使用新的 Qt5 语法(可选):

QObject::connect(&webControl, &Ui::MainWindow::loadFinished,
                 &w, &Ui::MainWindow::loadFinished);

关于新语法的更多信息:http://wiki.qt.io/New_Signal_Slot_Syntax

您需要将 QWebView *webView; 添加到您的 mainwindow.h:

mainwindow.h

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QWebView *getWebView() const;

public slots:
    void loadFinished(bool arg1);
    void setWebView(QWebView *webControl);

private:
    Ui::MainWindow *ui;
    QWebView *webView;
};

mainwindow.cpp

...

QWebView *MainWindow::getWebView() const
{
    return webView;
}

void MainWindow::setWebView(QWebView *webControl)
{
    webView = webControl;
    QObject::connect(webControl,
                     SIGNAL(loadFinished(bool)),
                     this,
                     SLOT(loadFinished(bool)));
}

如果您确实需要在 main.cpp 中声明 QWebView,则将指针传递给 setWebView() 函数:

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    QWebView webControl;
    w.setWebView(&webControl);

    w.show();

    return a.exec();
}

你的问题是 QWebView webControl; webcontrol 是一个 qwebview 而你的信号不在 QWebview 中,而是在 MainWindow 中。您需要在 QWebView 中使用该信号。这就是为什么它抱怨找不到信号的原因。

编辑

你不知道什么是插槽,什么是信号。你是两个不同的东西。信号就像警报。插槽是接收器,它作为正常功能工作。

如果你想让你的 webControl 变量成为发送者,那么你必须在你的 QWebView.h class :

中像这样声明信号
signals:
    void yourSignalName(bool arg1);

并像这样使用连接:

QObject::connect(&webControl,
             SIGNAL(yourSignalName(bool)),
             &w,
             SLOT(loadFinished(bool)));