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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 3.3.6 : перенос программы с C++ Builder на Qt  (Прочитано 9756 раз)
TukiNov
Гость
« : Апрель 03, 2007, 21:40 »

Так как переписываю прогу которая была написана в C++ Builder, наступил на грабли Улыбающийся а именно CommaText.
Есть строка вида :
Код:

tuki,123456,48FFE408---1224729608,"11,,52,53,51,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
""Creative 270"",1.1,,""Акустические системы, наушники, микрофоны (Справочник по компьютерной технике ФГУП """"НИИТП"""")"",,,124,,,,,,,ACUSTIK_NIITP,1,1,124011,""Акустические системы"",""Акустические системы"",,,,,,""В неотапливаемом помещении"",,,,,,,,,,,,,,,,,,,,,,,,,"

Я сначало привожу это строку к виду :
Код:

tuki#123456#48FFE408---1224729608#11//2/3/1/////////////////////////////////////////////Creative 270/1.1//Акустические системы, наушники, микрофоны (Справочник по компьютерной технике ФГУП \"НИИТП\")///124///////ACUSTIK_NIITP/1/1/124011/Акустические системы/Акустические системы//////В неотапливаемом помещении////////////////////#

т.е. все внешние запятые заменяю на #, а внутренние которые не заключены в двойные кавычки на / , а потом уже делаю инсерты в QPtrList.
Может есть аналог CommaText  в QT ?
Или может кто то предложет более интересное решение. Если интересно могу выложить ф-ю которую я написал
Записан
SABROG
Гость
« Ответ #1 : Апрель 03, 2007, 22:21 »

QStringList::split(...)

Только врятли он сможет определить что разделять не нужно строку там где запятая в кавычках.
Записан
TukiNov
Гость
« Ответ #2 : Апрель 03, 2007, 22:35 »

Цитата: "SABROG"
QStringList::split(...)

Только врятли он сможет определить что разделять не нужно строку там где запятая в кавычках.

это я знаю, не очень удобная штука.
Я надеюсь просто что кто нить уже написал на подобии этого Улыбающийся
Записан
TukiNov
Гость
« Ответ #3 : Апрель 06, 2007, 21:06 »

Ладно, с этим вроде разобрался. Теперь такой вопрос. На С++ Builder написан прога которая работает через CGI. Написана с помощью TWebActionItem(TObject *Sender,
      TWebRequest *Request, TWebResponse *Response, bool &Handled), выступающая в роли сервера. Елиент видимо тоже использует эту фигню.
Так вот, если с cgi в QT я более- менее разобрался (нашёл библиотеку), то вот как получать запросы от клиента не могу допереть.
Забыл сказать, что запрос отправляется методом POST, если я не ошибаюсь.
Помогите плиз.
Записан
_govorilka
Гость
« Ответ #4 : Апрель 08, 2007, 18:42 »

Параметры POST-запроса передаются через переменные окружения (для Apache), их можно получить через QProcess::environment(), QProcess::systemEnvironment()
Записан
TukiNov
Гость
« Ответ #5 : Апрель 08, 2007, 22:09 »

вообщем, запрос я получил, изменил чуть пример $QTDIR/examples/network/httpd, вот только странно, получается два запроса а не один :
первый запрос идёт в таком виде :
Код:

POST / HTTP/1.1
Content-Type: text/html
Content-Length: 38
Host: 192.10.0.1:8080
Accept: text/html, */*
User-Agent: Mozilla/3.0 (compatible; Indy Library)


а вторым уже то что мне нужно :
Код:

tuki,123456,æëè›œéîòòòòîèææççæçíìóéîó

допустим, запрос я обработаю, а в каком виде мне обратно результат отправлять ?
Записан
_govorilka
Гость
« Ответ #6 : Апрель 09, 2007, 16:17 »

Цитата: "TukiNov"
вообщем, запрос я получил, изменил чуть пример $QTDIR/examples/network/httpd, вот только странно, получается два запроса а не один :
первый запрос идёт в таком виде :
Код:

POST / HTTP/1.1
Content-Type: text/html
Content-Length: 38
Host: 192.10.0.1:8080
Accept: text/html, */*
User-Agent: Mozilla/3.0 (compatible; Indy Library)


а вторым уже то что мне нужно :
Код:

tuki,123456,æë�蛜éîòòòòîèææççæçíìóéîó

допустим, запрос я обработаю, а в каком виде мне обратно результат отправлять ?


Это не два запроса - это заголовок и данные, разделанные между собой пустой строкой. После данных, кстати идет еще одна пустая строка, она означает конец запроса

добавлено спустя 1 час 2 минуты:

 Скачай вот эту книжку, я думаю, она тебе поможет:
http://zipsites.ru/books/kruglinski_progr_na_visual_c_6/[/url]
Записан
TukiNov
Гость
« Ответ #7 : Апрель 11, 2007, 12:55 »

Цитата: "_govorilka"
Цитата: "TukiNov"
вообщем, запрос я получил, изменил чуть пример $QTDIR/examples/network/httpd, вот только странно, получается два запроса а не один :
первый запрос идёт в таком виде :
Код:

POST / HTTP/1.1
Content-Type: text/html
Content-Length: 38
Host: 192.10.0.1:8080
Accept: text/html, */*
User-Agent: Mozilla/3.0 (compatible; Indy Library)


а вторым уже то что мне нужно :
Код:

tuki,123456,æë�蛜éîòòòòîèææççæçíìóéîó

допустим, запрос я обработаю, а в каком виде мне обратно результат отправлять ?


Это не два запроса - это заголовок и данные, разделанные между собой пустой строкой. После данных, кстати идет еще одна пустая строка, она означает конец запроса

добавлено спустя 1 час 2 минуты:

 Скачай вот эту книжку, я думаю, она тебе поможет:
http://zipsites.ru/books/kruglinski_progr_na_visual_c_6/[/url]

спасибо, прочитал, ответ составил, но мне всё равно не понятно почему httpd разбивает запрос на два запроса.
Пример :
Код:

void HttpDaemon::newConnection( int socket )
{
    QSocket* s = new QSocket( this );
    connect( s, SIGNAL(readyRead()), this, SLOT(readClient()) );
    connect( s, SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
    s->setSocket( socket );
    emit newConnect();
}

Первый раз readyRead() срабатывает на заголовок :
Код:

POST / HTTP/1.1
Content-Type: text/html
Content-Length: 38
Host: 192.10.0.1:8080
Accept: text/html, */*
User-Agent: Mozilla/3.0 (compatible; Indy Library)


и второй раз на :
Код:

tuki,123456,æë�蛜éîòòòòîèææççæçíìóéîó

Записан
TukiNov
Гость
« Ответ #8 : Апрель 15, 2007, 02:08 »

Ладно, этим тоже разобрался.
Теперь другой вопрос.
Так как клиент находится в винде, мне ему нужно нужно отправить строку через сокет в кодировке utf8. Через QTextCodec::setCodecForTr( QTextCodec::codecForName("utf8"));, и заключения ответа в tr() не проходит. Все перепробовал. Есть идеи ? Улыбающийся
проблема в том что ответ кодируется через ассемблер Улыбающийся и я не могу поставить кодек на QTextStream, так как клиент тогда его не расшифрует, мне нада до этого(до кодирования) перевести простую строку в ср1251, пока есть только идея, использую поток записать строчку в файл в кодировке ср1251, а потом считать её.

добавлено спустя 44 минуты:

 тоже не получилось Грустный Жду ваших идей ...
Записан
TukiNov
Гость
« Ответ #9 : Апрель 16, 2007, 01:41 »

поискав на форуме, подошло вот что :
Код:

QString qStr = QString::fromUtf8(final) ;
QCString res = QTextCodec::codecForName("utf8")->fromUnicode( qStr );
Записан
Разуев Максим
Гость
« Ответ #10 : Май 08, 2007, 15:29 »

По идее должно работатьеще и QString::fromLocal8Bit(text).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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