2011-08-24 35 views
7

Tôi có các lớp MainWindowQNAMRedirect và tôi đang cố biên dịch chương trình nhưng gặp phải lỗi trình biên dịch.QT không có chức năng phù hợp để gọi tới 'MainWindow :: connect()

Đây là QNAMRedirect lớp:

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(); 

}; 

và đây là MainWindow lớp:

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

và tôi đang cố gắng để kết nối NAMRedirect::finished(QString) tín hiệu để QTextEdit widget trong MainWindow theo cách này:

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

    urlGet.doRequest(); 

} 

nhưng tôi nhận được lỗi trình biên dịch:

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

làm cách nào tôi có thể khắc phục điều đó?

Trả lời

7

Lý do cho lỗi biên dịch là hai đối tượng bạn chuyển đến hàm connect() cần phải là con trỏ. Vì vậy, sử dụng & urlGet (thay vì chỉ urlGet) sẽ sửa lỗi biên dịch của bạn. Tuy nhiên, ngay sau khi chức năng của bạn trả về đối tượng này sẽ đi ra khỏi phạm vi và bị phá hủy, vì vậy tôi đề nghị bạn thay đổi chức năng của bạn để tìm một cái gì đó như thế này:

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

Bạn sẽ, tất nhiên, cần phải thực hiện biện pháp rằng bạn không bị rò rỉ bộ nhớ ở đây.

+0

cảm ơn bạn rất nhiều người đàn ông :) –

+1

Bạn có thể thay đổi kết nối của mình để sử dụng cú pháp Qt5 mới. Ưu điểm là bạn nhận được thông báo tại thời gian biên dịch của bất kỳ không phù hợp –

Các vấn đề liên quan