connect()找不到信号功能

时间:2015-09-09 04:37:06

标签: c++ qt signals qt-creator slot

我正试图像这样设置connect()

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

但是它给出了错误:

  

QObject :: connect:没有这样的信号   QWebView :: UI ::的MainWindow :: loadFinished(布尔)

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)
{
}

为什么我收到此错误以及如何解决此问题?

3 个答案:

答案 0 :(得分:2)

您需要将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)));
}

如果您确实需要在QWebView中声明main.cpp,请将指针传递给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();
}

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

您的问题是QWebView webControl; webcontrol是qwebview,您的信号不在QWebview中,而是在MainWindow中。你需要QWebView中的那个信号。这就是为什么它抱怨无法找到的信号。

修改

你知道什么是插槽,有什么信号,你有问题。你有两件事。信号就像一个警报。插槽是接收器,它作为普通功能工作。

如果你想让webControl var成为发送者,那么你必须在我们的QWebView.h类中声明这样的信号:

signals:
    void yourSignalName(bool arg1);

并像这样使用连接:

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