QT没有匹配函数调用'MainWindow :: connect() [英] QT no matching function for call to '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屋!