Qt绑定插槽和信号失败QMainWindow QWebview

时间:2014-12-26 09:58:57

标签: c++ qt

.h文件:

#include <QMainWindow>
#include <QWidget>
#include <QTimer>
#include "tool/shape.h"
#include "tool/sensor.h"
#include "tool/sensor_set.h"
#include "tool/track_unit.h"
#include "tool/track.h"
#include "tool/track_set.h"
#include "tool/opera.h"

class QWebView;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected Q_SLOTS:
    void test();
    //void startOpera();

public:
Q_SIGNALS:
    void updateObject(const QString& data);

private:
    //Ui::MainWindow *ui;
    QWebView* m_webView;
tools::Opera2D* opera;
tools::Opera2D::Iterator *iter;
tools::Opera2D::OperaState* opera_state;

QTimer* m_timerOpera;

};

的.cpp

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
//ui(new Ui::MainWindow)*/
{
    m_webView = new QWebView(this);
    QUrl url = QUrl("file:///F:/WORKSTATON/SVN/txm/txm/google/index.html");
    m_webView->load(url);
    setCentralWidget(m_webView);
    move(QPoint(200, 200));
    QObject::connect(this, SIGNAL(updateObject(const QString&)),
           m_webView->page()->mainFrame(), SLOT(evaluateJavaScript(const QString&)));
}

mingw g ++ show:

错误:

F:\WORKSTATON\SVN\tools_temp\mainwindow.cpp:162: error: no matching function for call to 'MainWindow::connect(MainWindow* const, const char*, QWebFrame*, const char*)'
                m_webView->page()->mainFrame(), SLOT(evaluateJavaScript(const QString&)));

错误:

D:\Program\Qt\Qt5.3.1\5.3\mingw482_32\include\QtCore\qobject.h:215: error: no type named 'Object' in 'struct QtPrivate::FunctionPointer<const char*>'

1 个答案:

答案 0 :(得分:1)

如果您勾选以下复选框:

  • Q_OBJECT宏不丢失
  • 标记明显
  • 插槽标记
  • 参数号匹配
  • 参数类型匹配
  • 你没有拼写错误
  • 您正在继承QObject
  • 您正在使用发件人和收件人的指针
  • 您运行qmake以获取最新状态

原因是您忘记包含返回的堆对象的头文件,即:

#include <QWebFrame>

供将来参考:鉴于您使用Qt 5.3.1,如果您在其他受支持的平台上也可以使用Qt 5,或者至少有条件地使用Qt 5,您可以尝试使用此表单:

connect(this, &MainWindow::updateObject,
        m_webView->page()->mainFrame(), &QWebFrame::evaluateJavaScript);

话虽如此,您的代码还有其他小问题,但它们只是相关的:

  • 您的方案中的信号在标题中标记为public时没有多大意义。

  • 接收者是this对象是不寻常的;换句话说,您可以重新考虑您的设计,为什么不直接在您的代码库的其他位置直接调用插槽或从此接收器连接。