【发布时间】:2012-10-18 13:56:28
【问题描述】:
我在 QThread 中使用 QNetworkAccessManager 时遇到了麻烦。 相同的功能在不使用线程的情况下也能正常工作。 我目前只使用一个线程,我还需要添加更多线程。
它会触发错误消息:“Object::connect: No such slot QThread::replyFinished(QNetworkrReply*)”
头文件代码(NewThread.h)为:
class NewThread: public QThread
{
public slots:
void replyFinished(QNetworkReply* reply);
protected:
void run();
private:
};
The source code file(NewThread.cpp ):
void NewThread::replyFinished(QNetworkReply *net_reply)
{
QByteArray data = net_reply->readAll();
QString str(data);
}
void NewThread::run()
{
QNetworkAccessManager *manager;
manager = new QNetworkAccessManager ();
QNetworkRequest req;
req.setUrl(QUrl("My url"));
QByteArray postData;
postData.append("some data string");
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
manager->setCookieJar(new QNetworkCookieJar(manager));
//Define the Request-url:
connect (manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinish (QNetworkReply *)));
//Send the request:
manager->post(req, postData);
}
void NewThread::replyFinish(QNetworkReply *reply)
{
QString answer = QString::fromUtf8(reply->readAll());
qDebug () << answer;
}
我正在另一个类中创建一个 NewThread 类的对象,如下所示:
NewThread thread1;
thread1.start();
我想知道为什么相同的代码没有线程而不是线程。 我处境艰难,不胜感激。
【问题讨论】:
-
每个类中都需要一个
Q_OBJECT宏来定义槽和信号。 -
Q_OBJECT 不工作,我已经尝试过了..它引发了一堆其他错误。 newthread.obj:-1: error: LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall NewThread::metaObject(void)const" (?metaObject@NewThread@@UBEPBUQMetaObject@@XZ)
-
那么您需要修复这些错误。该宏是必需的。
-
error.newthread.obj:-1 的任何提示:错误:LNK2001:未解析的外部符号“public: virtual struct QMetaObject const * __thiscall NewThread::metaObject(void)const”
-
清理构建并确保您使用的任何构建系统都在标题上调用
moc。
标签: qt signals-slots qthread qnetworkaccessmanager