Qt 4.8.1を実行しています
QNetworkRequest を使用してリクエストを送信しようとすると、「QEventLoop: Cannot be used without QApplication」エラーが発生します。イベントループ内で実行していると思います。
void WebLoader::load()
{
QNetworkRequest request;
request.setUrl(QUrl("http://www.bbc.co.uk/"));
QNetworkAccessManager *manager = new QNetworkAccessManager();
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(checkForUpdateFinished(QNetworkReply*)));
QNetworkReply *reply = manager->get(request);
connect(reply, SIGNAL(readyRead()), this, SLOT(checkForUpdateSlot()));
}
manager->get(reply) 呼び出しは戻りません。
この関数は、メニュー項目がクリックされたときに呼び出されます。そのスタック トレースに QWidget::event(QEvent) があります。アプリケーションは確実に実行されており、複雑な UI の残りの部分が機能しています。
私が試したバリエーションとして:
- 新しい QNetworkAccessManager(mainWindow) を使用 - mainWindow は QMainWindow から継承します
- 新しい QNetworkAccessManager(application) を使用 - アプリケーションは QApplication から継承します
- customEvent から load() を呼び出す
- タイマー コールバックから load() を呼び出す
[編集]
現在、MainWindow コンストラクターで QNetworkAccessManager を構築しています。
MainWindow::MainWindow() : queryAnalyser(NULL)
{
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(managerFinished(QNetworkReply*)));
managerFinished が呼び出されていません。
デバッグ IO を取得しています: 'QObject: 別のスレッドにある親の子を作成できません。(親は MainWindow(0x28fcd0)、親のスレッドは QThread(0x4862828)、現在のスレッドは QThread(0x7d90b70) '
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
WXApplication *a = WXApplication::getApp();
MainWindow mainWin;
mainWin.show();
mainWin.checkArgs();
return app.exec();
}