Russian Qt Forum
Март 29, 2024, 08:20
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
Удаление объектов Qt 4.0.1
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Удаление объектов Qt 4.0.1 (Прочитано 8543 раз)
Druxa
Гость
Удаление объектов Qt 4.0.1
«
:
Октябрь 16, 2005, 14:47 »
В моей программе есть класс, который качает файлы через http. Создаётся объект:
Код:
http = new QHttp;
http->setHost(fromHost);
http->get("/" + fileName, &file);
http->closeConnection();
connect(http, SIGNAL(done(bool)), this, SLOT(httpDone(bool)));
void downloadFiles::httpDone(bool error)
{
if (error) {
file.remove();
emit httpDownloadError();
}
else {
file.close();
emit httpDownloadOk();
}
}
Деструктор:
downloadFiles::~downloadFiles()
{
delete http;
}
Так вот! Когда я создаю объект loadFiles = new downloadFiles(mainHost, "", "users.txt");, а затем если удаляю его при возникновении сигнаола httpDownloadError() приложение зависает. Если удалять объект при httpDownloadOk(), т.е. когда файл успешно скачался, ни каких проблем не возникает. Сначало я подумал, что если генерируется сигнал ошибки, то в классе Qhttp предусмотрено удаление объекта по умолчанию, но если я вручную не удаляю объект при возникновении ошибки скачивания оперативная память пропадает, если пытаться повторять процедуру при отсутствии соединения с интернетом(т.е. генерируется httpDownloadError()), то память пропадает всё больше и больше! Что длать? как правильно сконструировать деструктор?
Записан
oktogen
Гость
Удаление объектов Qt 4.0.1
«
Ответ #1 :
Октябрь 18, 2005, 10:16 »
Мне кажется, до срабатывания деструктора, нужно разорвать
connect(http, SIGNAL(done(bool)), this, SLOT(httpDone(bool)));
Записан
Druxa
Гость
Удаление объектов Qt 4.0.1
«
Ответ #2 :
Октябрь 18, 2005, 16:18 »
Цитата: "oktogen"
Мне кажется, до срабатывания деструктора, нужно разорвать
connect(http, SIGNAL(done(bool)), this, SLOT(httpDone(bool)));
Почему тогда при done(bool), где bool=true деструктор уничтожает объект и не происходит никаких ошибок, память отчищается?
Записан
oktogen
Гость
Удаление объектов Qt 4.0.1
«
Ответ #3 :
Октябрь 19, 2005, 12:39 »
Трудно понять так сразу.
Мне кажется общий вид проблемы таков.
Ты удаляешь объект, после этого проходит этот сигнал и
срабатывает слот, который обращается к функциям и переменным уже удаленного объекта. Естественно, результат будет непредсказуемым.
Записан
oktogen
Гость
Удаление объектов Qt 4.0.1
«
Ответ #4 :
Октябрь 19, 2005, 12:42 »
Посмотри, слот, который связан с сигналом HttpDownloadError().
Возможно там проблема
Записан
Druxa
Гость
Удаление объектов Qt 4.0.1
«
Ответ #5 :
Октябрь 20, 2005, 00:52 »
Цитата: "oktogen"
Посмотри, слот, который связан с сигналом HttpDownloadError().
Возможно там проблема
Я удаляю объект в слоте SLOT(connectError()), слот срабатывает при возникновении сигнала HttpDownloadError() моего объекта, так что всё должно корректно удаляться.
Код:
loadFiles = new downloadFiles(mainHost, "sysFiles", "filesinfo.txt");
connect(loadFiles, SIGNAL(httpDownloadOk()), this, SLOT(internetConnectOk()));
connect(loadFiles, SIGNAL(httpDownloadError()), this, SLOT(connectError()));
В случае httpDownloadOk() объект удаляется без ошибок.
Записан
oktogen
Гость
Удаление объектов Qt 4.0.1
«
Ответ #6 :
Октябрь 20, 2005, 10:16 »
Приведи текст слота connectError(). Желательно весь.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...