2013-08-23 65 views
0
我在使用Qt中製作自插槽麻煩

。代碼:Qt的C++自定義插槽

class.h文件:

public slots: 
    void resetUrl(){ 
     this->load(QUrl("http://www.google.com")); 
} 

的main.cpp文件:

#include <QWebView> 
#include <QPushButton> 

QWebView *web = new QWebView(mainwindow); 
QPushButton *button = new QPushButton(mainwindow); 

web->load(QUrl("http://www.yahoo.com")); 
button->setText("Google"); 

QObject::connect(button, SIGNAL(clicked()), web, SLOT(resetUrl())); 

它給了我一個消息,說負載不是公認的成員。我需要改變什麼?

編輯: 繼承人的全webview.h文件:

#ifndef WEBVIEW_H 
#define WEBVIEW_H 

#include <QMainWindow> 
#include <QWebView> 


namespace Ui { 
class webview; 
} 

class webview : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit webview(QWidget *parent = 0); 
    ~webview(); 

public slots: 
    void resetUrl(){ 
     this->load(QUrl("http://www.google.com")); 
    } 

private: 
    Ui::webview *ui; 
}; 

#endif // WEBVIEW_H 
+1

這看起來不正確的。您的插槽定義了哪種類別? – Mat

+0

如果這是你所有的代碼,那麼你的CPP文件丟失方法定義和如果那是你的整個.h文件中你不都 – mdoran3844

+0

那不是我的整個代碼有課,我可以粘貼休息,如果你需要它 –

回答

0

您正試圖打電話給你webview類的load()方法在這裏:

void resetUrl(){ 
    this->load(QUrl("http://www.google.com")); 
} 

但是,你的類衍生QMainWindow

class webview : public QMainWindow 

基類和派生類都沒有任何load()方法。你應該從QWebView而不是QMainWindow派生webview類。在這種情況下,將調用基類'load()方法,並且它將正常工作。

+0

當我將QMainWindow更改爲QWebView的時候,我遇到了一些新的錯誤:'QMainWindow'不是'webview'的直接基礎,也沒有用於調用'Ui :: webview :: setupUi(webview * const) –

+0

@COnnorM,您還需要更改構造函數(以調用正確的基類的構造函數)。同時擺脫'ui',你不需要它(我甚至不確定'QWebView'有它)。 – SingerOfTheFall

+0

真棒,它現在工作:) –