Russian Qt Forum
Сентябрь 30, 2024, 18:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Передача файлов через QTcpSocket без gui  (Прочитано 9762 раз)
Bepec
Гость
« Ответ #15 : Май 16, 2013, 09:41 »

Спасибо тебе Serr500  Улыбающийся Надеюсь хоть тебя они поймут Веселый
Записан
qtest
Гость
« Ответ #16 : Май 16, 2013, 17:55 »

С первой частью вопроса понятно, ничего не выводилось потому что ничего не успело записаться. А что со второй? Есть какой-нибудь способ получить переменную для мейна, в которой гарантированно будет ответ?
Второй вопрос:
Можно ли избавиться от ошибки "undefined reference to `vtable for Client'"? Всегда появляется, если весь код находится в мейне. Не то, чтобы это было очень важно, но раздражает
Записан
Bepec
Гость
« Ответ #17 : Май 16, 2013, 19:01 »

Можно, но придётся использовать костыли на мой взгляд.

Почему бы вас не написать класс который будет ответ выводить спокойно?
Почему вы рвётесь запихать всё в main?
Или у вас это какое - то ограничение?

Записан
qtest
Гость
« Ответ #18 : Май 16, 2013, 23:10 »

Первый курс, только начали qt, поэтому пока необходимость использовать классы, особенно в таких случаях, скорее чуть раздражает, чем реально помогает. Как мне пока кажется, удобнее использовать более надежные переменные и работать с более последовательным кодом. Видимо еще не дошел до уровня ООП.
Примерно по этой же причине (очень много лишнего) не нравится пока использовать гуи.
Примеров с отправкой файлов с клиента на сервер все-таки нет? В соседнем треде, по идее, нечто похоже, возможно, заливка на определенный файлообменник была бы даже удобнее.
Записан
Bepec
Гость
« Ответ #19 : Май 17, 2013, 06:52 »

Кхм. Вы не читаете? Вам Serr500 повторил, что сеть у нас асинхронная. То есть нет никакой гарантии, что ответ придёт сразу же. Поэтому последовательно оно не выполнится.

Но если в методе клиента в котором вы создаёте запрос, прописать что-то типа
Код:
QEventLoop loop;
connect(networkReply, SIGNAL(finished ()), loop, SLOT(exit()));
loop.start()

Тогда программа не выйдёт из слота и будет ожидать завершения запроса.

НО...

Но сигнал слоты Qt построены на цикле событий QApplication. Проще выражаясь пока вы его не запустите, остальные циклы будут вам выдавать одну скарбезную ошибку (могу ошибаться, но вроде так).

Более надёжные переменные и более последовательный код = больше кода, больше знаний, отсутствие гибкости.
Девиз QT — Code Less Create More, что означает "меньше программируй — больше твори". Вы же от этого принципа отказываетесь ;P
Записан
Serr500
Гость
« Ответ #20 : Май 17, 2013, 08:06 »

Как мне пока кажется, удобнее использовать более надежные переменные и работать с более последовательным кодом. Видимо еще не дошел до уровня ООП.
Видимо так. Ну если уж хотите делать неправильно, то смотрите в сторону QAbstractSocket::waitForReadyRead, QAbstractSocket::waitForBytesWritten, QAbstractSocket::waitForConnected. Не будет никакой асинхронности (точнее говоря, эти методы её скроют), сигналов и слотов. А также гибкости. Будет тупой код на уровне Windows 95.

P.S. Есть одна очень мудрая мысль: "Если у тебя нет времени сделать всё правильно, то где ты потом найдёшь время чтобы всё переделать?"
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.129 секунд. Запросов: 21.