2011-08-24 29 views
7

私はMainWindowQNAMRedirectのクラスを持っていますが、コンパイルエラーが発生しました。ここでQT 'MainWindow :: connect()を呼び出す関数がありません

QNAMRedirectクラスです:

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; 
}; 

と私はMainWindowQTextEditウィジェットにこの方法をNAMRedirect::finished(QString)信号を接続しようとしています:

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

    urlGet.doRequest(); 

} 

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クラスです

コンパイルエラーが発生する:

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

どうすれば修正できますか?

答えて

7

なぜなら、コンパイルエラーの原因は、connect()関数に渡す2つのオブジェクトがポインタである必要があるからです。したがって、& urlGet(urlGetの代わりに)を使用すると、コンパイルエラーが修正されます。しかし、できるだけ早くあなたの関数が返すと、このオブジェクトがスコープ外に行くと破壊されるので、私はあなたがより多くのこのような何かを見て、あなたの機能を変更するお勧め:

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

あなたは、当然のことながら、対策を取る必要がありますあなたがここで記憶を漏らしていないということ。

+0

大変ありがとうございます:) –

+1

新しいQt5構文を使用するように接続を変更するとよい場合があります。利点は、コンパイル時に不一致が発生したときに通知を受け取ることです –