Я использую Qt Creator 1.3.0 с Qt 4.6.0 (32 бит) под Windows 7 Ultimate. Рассмотрим следующий QThread:
Заголовок
class ResultThread : public QThread
{
Q_OBJECT
QString _post_data;
QNetworkAccessManager _net_acc_mgr;
signals:
void onFinished(QNetworkReply* net_reply);
private slots:
void onReplyFinished(QNetworkReply* net_reply);
public:
ResultThread();
void run();
void setPostData(const QString& post_data);
};
Реализация
ResultThread::ResultThread() : _net_acc_mgr(this)
{
connect(&_net_acc_mgr, SIGNAL(finished(QNetworkReply*)),
this, SLOT(onReplyFinished(QNetworkReply*)));
}
void ResultThread::onReplyFinished(QNetworkReply* net_reply)
{
emit onFinished(net_reply);
}
void ResultThread::setPostData(const QString& post_data)
{
_post_data = post_data;
}
void ResultThread::run()
{
_net_acc_mgr.post(QNetworkRequest(QUrl("http://[omitted]")),
QByteArray(_post_data.toStdString().c_str()));
}
Всякий раз, когда _net_acc_mgr.post()
выполняется в ResultThread::run()
, я получил следующий выход приложения в Qt Creator:
QObject: не удается создать дочерние элементы для родителя, который находится в другом потоке.
(Parent - это QNetworkAccessManager (0x22fe58), родительский поток - QThread (0x9284190), текущий поток - ResultThread (0x22fe48)
Что это значит? Как его решить? Спасибо заранее.