QT没有用于调用'MainWindow :: connect()的匹配函数

Dav*_*ani 7 qt function

我有MainWindowQNAMRedirect类,我正在尝试编译程序,但收到编译器错误.

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

};
Run Code Online (Sandbox Code Playgroud)

这是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;
};
Run Code Online (Sandbox Code Playgroud)

我试图以这种方式将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();

}
Run Code Online (Sandbox Code Playgroud)

但我收到编译器错误:

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

我怎么能解决这个问题?

Chr*_*ris 8

编译错误的原因是传递给connect()函数的两个对象需要是指针.所以使用&urlGet(而不仅仅是urlGet)将修复你的编译错误.但是,只要您的函数返回此对象将超出范围并被销毁,所以我建议您更改您的函数以查找更像这样的内容:

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

当然,你需要采取措施,不要在这里泄漏记忆.

  • 更改连接以使用新的Qt5语法可能会很好。优点是您可以在编译时收到任何不匹配的通知 (2认同)