QT没有匹配函数调用'MainWindow :: connect() [英] QT no matching function for call to 'MainWindow::connect()

查看:1315
本文介绍了QT没有匹配函数调用'MainWindow :: connect()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 MainWindow QNAMRedirect 类,我试图编译程序,但得到编译器错误。



以下是 QNAMRedirect 类:

  class QNAMRedirect:public QObject 
{
Q_OBJECT
public:
explicit QNAMRedirect(QObject * parent = 0);
〜QNAMRedirect();

信号:

公共插槽:
void doRequest();
void replyFinished(QNetworkReply * reply);
信号:
void finished(QString);

private:
QPointer< QNetworkAccessManager> _qnam;
QUrl _originalUrl;
QUrl _urlRedirectedTo;
QNetworkAccessManager * createQNAM();

};

这里是 MainWindow class: p>

  namespace Ui {
class MainWindow;
}

class MainWindow:public QMainWindow
{
Q_OBJECT
$ b $ public:
显式MainWindow(QWidget * parent = 0 );
〜MainWindow();

私人插槽:
void on_request_clicked();

private:
Ui :: MainWindow * ui;
};

我想连接 NAMRedirect :: finished(QString) code>信号到 QTextEdit 小部件在 MainWindow 这种方式:

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

urlGet.doRequest();

}

但是我收到编译器错误:

 错误:没有匹配函数调用'MainWindow :: connect(QNAMRedirect&,const char *,QTextEdit *& const char *)' 

我该如何解决?

解决方案

编译错误的原因是您传递给connect()函数的两个对象需要是指针。所以使用& urlGet(而不是仅仅urlGet)将会修正你的编译错误。但是,只要你的函数返回,这个对象就会超出范围并被销毁,所以我建议你改变你的函数,看起来更像这样:

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

当然,您需要采取措施避免内存泄露。 p>

I have MainWindow and QNAMRedirect classes and I am trying to compile program but getting compiler error.

Here is QNAMRedirect class:

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

};

and here is MainWindow class:

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

and i am trying to connect NAMRedirect::finished(QString) signal to QTextEdit widget in MainWindow this way:

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

    urlGet.doRequest();

}

but i am getting compiler error:

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

how can i fix that?

解决方案

The reason for the compile error is that the two objects you pass to the connect() function need to be pointers. So using &urlGet (instead of just urlGet) will fix your compile error. However, as soon as your function returns this object will go out of scope and be destroyed, so I suggest you change your function to look something more like this:

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

You will, of course, need to take measure that you're not leaking memory here.

这篇关于QT没有匹配函数调用'MainWindow :: connect()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆