| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] QMap не хочет работать QNetworkAccessManager |
| Автор: Валерия 17.12.2011, 21:49 | ||||
Выдает невероятное количество ошибок. Когда вместо QNetworkAccessManager я пытаюсь использовать какой-то другой класс - всё работает отлично. ОЧЕНЬ большая просьба: не писать сообщения в стиле "тебе оно не нужно". Я знаю как можно сделать то что мне нужно другим вариантом, но мне уж очень интересно почему не выходит этим. Особенность QNetworkAccessManager? Ошибочки вот:
Попробуйте у себя запустить код что бы увидеть все... |
| Автор: bsa 17.12.2011, 22:36 |
| Ошибка очень простая. Основной ее текст в 6-й строке: "QObject::operator= is private". Это значит, что оператор присваивания определен в приватной зоне класса. Обычно, это делают, когда хотят запретить присваивание (читай копирование). В частности, все наследники QObject по умолчанию не могут копироваться. Для решения твоей проблемы необходимо использовать указатели на QNetworkAccessManager. Рекомендую использовать "умные" (QSharedPointer). |
| Автор: Валерия 17.12.2011, 23:00 | ||
Если не сложно, можно на примере? Я только третий день на Qt пишу Мне нужно что бы я могла с потока сохранить в глобальный ассоциативный массив состояние "браузера", а потом при необходимости его вернуть в поток и использовать дальше. |
| Автор: Artemon 17.12.2011, 23:08 |
| QMap<int, QNetworkAccessManager*> browsers; .. .. .. browsers[1] = new QNetworkAccessManager(); browsers[2] = new QNetworkAccessManager(); Для начала пойдет |
| Автор: Валерия 17.12.2011, 23:12 | ||
|
| Автор: Artemon 18.12.2011, 18:19 |
| QMap<int, QNetworkAccessManager*> browsers; |
| Автор: bsa 18.12.2011, 19:50 | ||
Лучше так:
|
| Автор: Валерия 18.12.2011, 20:28 |
| Artemon, со звёздочкой и пробывала. Ту ошибку что выдавало - написала, но уже в принципе не важно, потому что... bsa, огромное спасибо! Работает всё именно так как я и хотела |
| Автор: Валерия 18.12.2011, 21:22 |
| Упс... Проверила всё это на потоках... Не совсем работает. Я так понимаю что browsers может быть использован только в том потоке, в котором был создан? Потому что пишет "Cannot create children for a parent that is in a different thread" когда пытаюсь обратится к ранее созданному browsers[0] который был создан из другого потока. |
| Автор: bsa 19.12.2011, 00:13 |
| Валерия, как ты сама заметила вначале, решение использовать кучу этих классов скорее всего неверное. Но это уже отдельная тема для разговора (если вбить текст выдаваемой ошибки в гугл, то можно получить результат без создания дополнительной темы, тем более, что это уже обсуждалось и не раз). Если ответ на свой вопрос ты получила, то пометь тему решенной. |
| Автор: Валерия 19.12.2011, 10:54 |
Скорее всего вы правы. Я понимаю что рублю спички топором Потому что на самом то деле, мне нужно что бы сохранялась авторизация, и я могла ней потом воспользоватся, поэтому достаточно сохранить куки Ну, или попробовать сделать серилиазацию объекта... |
| Автор: Валерия 19.12.2011, 18:49 | ||
Решила свой вопрос через:
P.S правда все-равно интересно, почему не получилось читать объект если он был создан в другом потоке, поэтому с этим вопросом еще разберусь |
| Автор: bsa 19.12.2011, 20:10 |
| я дал тебе инструкцию по получению ответа. воспользуйся ей. |