2011-08-24 66 views
7

我有MainWindowQNAMRedirect類,我試圖編譯程序,但得到編譯器錯誤。QT沒有匹配函數調用'MainWindow :: connect()

這裏是QNAMRedirect類:

class QNAMRedirect : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit QNAMRedirect(QObject *parent = 0); 
    ~QNAMRedirect(); 

signals: 

public slots: 
    void doRequest(); 
    void replyFinished(QNetworkReply* reply); 
signals: 
    void finished(QString); 

private: 
     QPointer<QNetworkAccessManager> _qnam; 
     QUrl _originalUrl; 
     QUrl _urlRedirectedTo; 
     QNetworkAccessManager* createQNAM(); 

}; 

這裏是MainWindow類:

namespace Ui { 
    class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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

private slots: 
    void on_request_clicked(); 

private: 
    Ui::MainWindow *ui; 
}; 

,我試圖以這種方式連接NAMRedirect::finished(QString)信號QTextEdit小部件MainWindow

void MainWindow::on_request_clicked() 
{ 
    QNAMRedirect urlGet(this); 
    QObject::connect(urlGet,SIGNAL(finished(QString)),ui->textEdit,SLOT(setText(QString))); 

    urlGet.doRequest(); 

} 

但我越來越編譯器錯誤:

error: no matching function for call to 'MainWindow::connect(QNAMRedirect&, const char*, QTextEdit*&, const char*)' 

我該如何解決這個問題?

回答

7

編譯錯誤的原因是您傳遞給connect()函數的兩個對象需要是指針。所以使用& urlGet(而不僅僅是urlGet)將修復你的編譯錯誤。但是,只要你的函數返回這個對象將走出去的範圍和被破壞,所以我建議你換你的函數看起來更像是這樣的:

QNAMRedirect *urlGet = new QNAMRedirect(this) 
QObject::connect(urlGet,SIGNAL(finished(QString)),ui->textEdit,SLOT(setText(QString))); 
urlGet->doRequest(); 

你會的,當然,需要採取措施你不是在這裏泄漏記憶。

+0

非常感謝你:) –

+1

改變你的連接以使用新的Qt5語法可能是一件好事。優點是你在編譯時得到任何不匹配的通知 –