QT нет подходящей функции для вызова 'MainWindow :: connect () - PullRequest
7 голосов
/ 24 августа 2011

У меня есть 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 Ответ

8 голосов
/ 24 августа 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...