Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] QMap не хочет работать QNetworkAccessManager 
V
    Опции темы
Валерия
Дата 17.12.2011, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Код
#include <QtCore/QCoreApplication>
#include <QNetworkRequest>
#include <QNetworkReply>

QMap<int, QNetworkAccessManager> browsers;

int main(int argc, char *argv[]){
    QCoreApplication a(argc, argv);
    
    browsers[1] = QNetworkAccessManager(); 
    browsers[2] = QNetworkAccessManager(); 
       
    return a.exec();
}
Это весь код.
Выдает невероятное количество ошибок.
Когда вместо QNetworkAccessManager я пытаюсь использовать какой-то другой класс - всё работает отлично.
ОЧЕНЬ большая просьба: не писать сообщения в стиле "тебе оно не нужно".
Я знаю как можно сделать то что мне нужно другим вариантом, но мне уж очень интересно почему не выходит этим.
Особенность QNetworkAccessManager?

Ошибочки вот:
Код
C:\Folder\Projects\testing\untitled-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\..\..\..\..\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtNetwork\QNetworkAccessManager:1: In file included from ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\mingw\include/QtNetwork/QNetworkAccessManager:1,
C:\Folder\Projects\testing\untitled-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\..\..\..\..\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtNetwork\qnetworkreply.h:50: from ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtNetwork/qnetworkreply.h:50,
C:\Folder\Projects\testing\untitled-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\..\..\..\..\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtNetwork\QNetworkReply:1: from ..\..\..\..\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtNetwork/QNetworkReply:1,
C:\Folder\Projects\testing\untitled-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\..\untitled\main.cpp:3: from ..\untitled\main.cpp:3:
C:\Folder\Projects\testing\untitled-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\..\..\..\..\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtCore\qobject.h:-1: In member function 'QNetworkAccessManager& QNetworkAccessManager::operator=(const QNetworkAccessManager&)':
C:\Folder\Projects\testing\untitled-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\..\..\..\..\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtCore\qobject.h:309: ошибка: 'QObject& QObject::operator=(const QObject&)' is private
C:\Folder\Projects\testing\untitled-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\..\..\..\..\QtSDK\Desktop\Qt\4.7.4\mingw\include\QtNetwork\qnetworkaccessmanager.h:72: ошибка: within this context
C:\Folder\Projects\testing\untitled-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\..\untitled\main.cpp:-1: In function 'int main(int, char**)':
и еще много-много
Попробуйте у себя запустить код что бы увидеть все...

Это сообщение отредактировал(а) Валерия - 17.12.2011, 21:51
PM MAIL   Вверх
bsa
Дата 17.12.2011, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Ошибка очень простая. Основной ее текст в 6-й строке: "QObject::operator= is private". Это значит, что оператор присваивания определен в приватной зоне класса. Обычно, это делают, когда хотят запретить присваивание (читай копирование). В частности, все наследники QObject по умолчанию не могут копироваться.

Для решения твоей проблемы необходимо использовать указатели на QNetworkAccessManager. Рекомендую использовать "умные" (QSharedPointer).
PM   Вверх
Валерия
Дата 17.12.2011, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Цитата(bsa @ 17.12.2011,  22:36)
Для решения твоей проблемы необходимо использовать указатели на QNetworkAccessManager. Рекомендую использовать "умные" (QSharedPointer).

Если не сложно, можно на примере?
Я только третий день на Qt пишу smile
Мне нужно что бы я могла с потока сохранить в глобальный ассоциативный массив состояние "браузера", а потом при необходимости его вернуть в поток и использовать дальше.
PM MAIL   Вверх
Artemon
Дата 17.12.2011, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 2
Всего: 20



QMap<int, QNetworkAccessManager*> browsers;
..
..
..
browsers[1] = new QNetworkAccessManager(); 
browsers[2] = new QNetworkAccessManager(); 


Для начала пойдет


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Валерия
Дата 17.12.2011, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Код

cannot convert 'QNetworkAccessManager' to 'QNetworkAccessManager*' in assignment


Это сообщение отредактировал(а) Валерия - 18.12.2011, 09:52
PM MAIL   Вверх
Artemon
Дата 18.12.2011, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 2
Всего: 20



QMap<int, QNetworkAccessManager*> browsers;

Это сообщение отредактировал(а) Artemon - 18.12.2011, 18:20


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
bsa
Дата 18.12.2011, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Лучше так:
Код
typedef QSharedPointer<QNetworkAccessManager> QNetworkAccessManagerPtr;
QMap<int, QNetworkAccessManagerPtr> browsers;
..
..
..
browsers[1] = QNetworkAccessManagerPtr(new QNetworkAccessManager()); 
browsers[2] = QNetworkAccessManagerPtr(new QNetworkAccessManager());
Это спасет от утечек памяти.
PM   Вверх
Валерия
Дата 18.12.2011, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Artemon, со звёздочкой и пробывала. Ту ошибку что выдавало - написала, но уже в принципе не важно, потому что...

bsa, огромное спасибо! Работает всё именно так как я и хотела smile
PM MAIL   Вверх
Валерия
Дата 18.12.2011, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Упс... Проверила всё это на потоках...
Не совсем работает.
Я так понимаю что browsers может быть использован только в том потоке, в котором был создан?
Потому что пишет "Cannot create children for a parent that is in a different thread" когда пытаюсь обратится к ранее созданному browsers[0] который был создан из другого потока.

Это сообщение отредактировал(а) Валерия - 18.12.2011, 21:33
PM MAIL   Вверх
bsa
Дата 19.12.2011, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Валерия, как ты сама заметила вначале, решение использовать кучу этих классов скорее всего неверное. Но это уже отдельная тема для разговора (если вбить текст выдаваемой ошибки в гугл, то можно получить результат без создания дополнительной темы, тем более, что это уже обсуждалось и не раз).

Если ответ на свой вопрос ты получила, то пометь тему решенной.
PM   Вверх
Валерия
Дата 19.12.2011, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Цитата(bsa @  19.12.2011,  00:13 Найти цитируемый пост)
Если ответ на свой вопрос ты получила, то пометь тему решенной. 

Скорее всего вы правы.
Я понимаю что рублю спички топором smile
Потому что на самом то деле, мне нужно что бы сохранялась авторизация, и я могла ней потом воспользоватся, поэтому достаточно сохранить куки smile
Ну, или попробовать сделать серилиазацию объекта...
PM MAIL   Вверх
Валерия
Дата 19.12.2011, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Решила свой вопрос через:
Код
QMap <QString, QList <QNetworkCookie> > cookmap;
...................
QNetworkCookieJar cooked;
...................
nwam.setCookieJar(&cooked);
...................
cooked.setAllCookies(cookmap[akk]);
...................
cookmap[akk] = cooked.allCookies();
Всем спасибо smile
P.S правда все-равно интересно, почему не получилось читать объект если он был создан в другом потоке, поэтому с этим вопросом еще разберусь smile
PM MAIL   Вверх
bsa
Дата 19.12.2011, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(Валерия @  19.12.2011,  19:49 Найти цитируемый пост)
P.S правда все-равно интересно, почему не получилось читать объект если он был создан в другом потоке, поэтому с этим вопросом еще разберусь
я дал тебе инструкцию по получению ответа. воспользуйся ей.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0908 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.