我正试图像这样设置connect()
:
QObject::connect(&webControl,
SIGNAL(Ui::MainWindow::loadFinished(bool)),
&w,
SLOT(Ui::MainWindow::loadFinished(bool)));
在main()
函数中但是它给出了错误:
QObject :: connect:没有这样的信号 QWebView :: UI ::的MainWindow :: loadFinished(布尔)
w
和webControl
的声明如下:
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)
{
}
为什么我收到此错误以及如何解决此问题?
答案 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)));