QT нет функции соответствия для вызова ' MainWindow:: connect()

Я MainWindow и QNAMRedirect классов и я пытаюсь скомпилировать программу, но получаю ошибку компилятора.

здесь 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*)'

как я могу исправить это?

1 ответов


причина ошибки компиляции заключается в том, что два объекта, которые вы передаете функции connect (), должны быть указателями. Таким образом, использование &urlGet (вместо просто urlGet) исправит вашу ошибку компиляции. Однако, как только ваша функция вернется, этот объект выйдет из области видимости и будет уничтожен, поэтому я предлагаю вам изменить свою функцию, чтобы выглядеть примерно так:

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

вам, конечно, нужно будет принять меры, чтобы вы не утечка памяти здесь.