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

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

Страниц: 1 [2] 3 4   Вниз
  Печать  
Автор Тема: Пространство имен  (Прочитано 20596 раз)
thechicho
Гость
« Ответ #15 : Январь 13, 2012, 02:04 »

дак работает и пое Веселый

// переделать эту глупость в namespace
а вот попрошу не хамить! Веселый я эту глупость вымучивал хз сколько времени)

переделаю, как-нибудь)
если Пантер выложит, и я реально увижу, что игра стоит свеч, тогда пораньше, если нет, тогда когда-нибудь)
кароче, сенкс всем за помощь
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #16 : Январь 13, 2012, 04:04 »

открой любой немаленький опенсорс проект и посмотри
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #17 : Январь 13, 2012, 09:25 »

Лови core.(cpp/h) из одного проекта.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
thechicho
Гость
« Ответ #18 : Январь 13, 2012, 12:36 »

сенкс, Пантер.

а это норма одну строчку в функцию переводить? чот я не понял зачем Улыбающийся

Код
C++ (Qt)
void writeSocket (QTcpSocket *socket, const QString &data)
{
socket->write ( (data + "\n").toUtf8 ());
}

вот несколько моих функций для работы с сетью

Код
C++ (Qt)
void Functions::GET(QNetworkAccessManager &qnam, bool redirect, bool readAnswer, bool showHeaders)
{
   QEventLoop loopGet;
   int badProxyCount=0;
 
   request.setRawHeader("Content-Type", QByteArray());
 
   REPEATGET:
 
   reply = qnam.get(request);
   //if (proxyType == "NoUseProxy")
//    QTimer timer;
//    timer.start(30000);
//    connect(&timer, SIGNAL(timeout()), &loopGet, SLOT(quit()));
 
   QObject::connect(reply, SIGNAL(finished()), &loopGet, SLOT(quit()));
   loopGet.exec();
 
   //if (proxyType == "NoUseProxy")
//    if (timer.isActive())
//        timer.stop();
 
   reply->deleteLater();
 
   if (reply->error()) {
       qDebug() << reply->errorString() << reply->error();
 
       if (badProxyCount<3) {
           badProxyCount++;
           qDebug() << "badProxyCountGet: " << badProxyCount;
           goto REPEATGET;
       }
   }
 
   if (showHeaders) HTTPHEADERS(reply);
 
   if (redirect) {
       REDIRECT(qnam, readAnswer, showHeaders);
       return;
   }
 
   if (readAnswer) {
       if (reply->rawHeader("Content-Encoding").contains("gzip")) { //if (gzip)
           answer = uncompress(reply->readAll());
       } else {
           answer = reply->readAll();
       }
   }
 
   lastUrl = reply->url().toString();
}
 
void Functions::POST(QNetworkAccessManager &qnam, bool redirect, bool readAnswer, bool showHeaders)
{
   QEventLoop loopPost;
   int badProxyCount=0;
 
   REPEATPOST:
 
   request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
 
   reply = qnam.post(request, postData);
 
   //if (proxyType == "NoUseProxy")
//    QTimer timer;
//    timer.start(30000);
//    connect(&timer, SIGNAL(timeout()), &loopPost, SLOT(quit()));
 
   QObject::connect(reply, SIGNAL(finished()), &loopPost, SLOT(quit()));
   loopPost.exec();
 
   //if (proxyType == "NoUseProxy")
//    if (timer.isActive())
//        timer.stop();
 
   reply->deleteLater();
 
   if (reply->error()) {
       qDebug() << reply->errorString() << reply->error();
 
       if (badProxyCount<3) {
           badProxyCount++;
           qDebug() << "badProxyCountPost: " << badProxyCount;
           goto REPEATPOST;
       }
   }
 
   if (showHeaders) HTTPHEADERS(reply);
 
   if (redirect) {
       REDIRECT(qnam, readAnswer, showHeaders);
       return;
   }
 
   if (readAnswer) {
       if (reply->rawHeader("Content-Encoding").contains("gzip")) { //if (gzip)
           answer = uncompress(reply->readAll());
       } else {
           answer = reply->readAll();
       }
   }
 
   lastUrl = reply->url().toString();
 
}
 
void Functions::HTTPHEADERS(QNetworkReply *reply)
{
   if (!SHOWHEADERS) return;
 
   qDebug() << endl << reply->url();
   qDebug() << "Request headers:  ";
   QList<QByteArray> reqHeaders = reply->request().rawHeaderList();
   //QList<QByteArray> reqHeaders = request.rawHeaderList();
   foreach (QByteArray reqName, reqHeaders)
   {
       QByteArray reqValue = reply->request().rawHeader(reqName);
       //QByteArray reqValue = request.rawHeader(reqName);
       qDebug() << reqName << ": " << reqValue;
   }
   qDebug() << "Reply headers:  ";
   QList<QByteArray> reqHeadersReply = reply->rawHeaderList();
   foreach( QByteArray reqName, reqHeadersReply )
   {
       QByteArray reqValue = reply->rawHeader( reqName );
       qDebug() << reqName << ": " << reqValue;
   }
}
 
void Functions::CLEARREQUEST(QNetworkRequest request)
{
   //QList<QByteArray> reqHeaders = reply->request().rawHeaderList();
   QList<QByteArray> reqHeaders = request.rawHeaderList();
   foreach (QByteArray reqName, reqHeaders)
   {
       //QByteArray reqValue = reply->request().rawHeader(reqName);
       QByteArray reqValue = request.rawHeader(reqName);
       //qDebug() << reqName << ": " << reqValue;
       request.setRawHeader(reqName, QByteArray());
   }
 
}

.h
Код
C++ (Qt)
 
public:
 
void GET(QNetworkAccessManager&, bool redirect = false, bool readAnswer = false, bool showHeaders = false);
   void POST(QNetworkAccessManager&, bool redirect = false, bool readAnswer = false, bool showHeaders = false);
   void REDIRECT(QNetworkAccessManager&, bool readAnswer = false, bool showHeaders = false);
   void HTTPHEADERS(QNetworkReply*);
   void CLEARREQUEST(QNetworkRequest);
 
QNetworkReply *reply;
   QNetworkRequest request;
   QString answer;
   QString lastUrl;
   QByteArray postData;
 
   bool SHOWHEADERS;

я не силен еще в этом, но если из класса эту байду вынесу, тогда reply и request, будут не видимы же в функциях? т.е. их придется передавать в параметрах, а это каждый раз тупо их писать. потом, если после функции захочу из reply чо-нить прочитать, надо будет функцию делать, кот. будет репли возвращать, т.е. еще лишний код каждый раз вбивать...
« Последнее редактирование: Январь 13, 2012, 12:43 от thechicho » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #19 : Январь 13, 2012, 12:45 »

Цитировать
а это норма одну строчку в функцию переводить? чот я не понял зачем
Вполне нормально. Чтобы не раскидывать по всему коду этот перевод строки. А если, в последствии, протокол немного изменится, придется только в одном месте подправить. Функция, скорее всего, заинлайнится и не будет стратиться время на ее вызов.

В твоем случае паршивастенько все сделано, но сделай так
QString GET (..............)
И используй свой QNetworkReply в функции.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
thechicho
Гость
« Ответ #20 : Январь 13, 2012, 12:47 »

а что именно у меня может привести и к чему?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #21 : Январь 13, 2012, 12:48 »

а что именно у меня может привести и к чему?
Если у тебя функция и так синхронна, то и возвращай из нее значение.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
thechicho
Гость
« Ответ #22 : Январь 13, 2012, 12:52 »

если возвращать, тогда логичней было бы сделать так
QNetworkReply* GET (..............)

но, я так делать не стал, т.к. влом стало лишние телодвижения делать,
т.е. каждый раз писать код считывания ответа, если он понадобится.

я подумал проще сделать глобальную переменную и туда читать по ходу перезаписывать, если понадобится...

к каким косякам может привести мой подход?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #23 : Январь 13, 2012, 13:20 »

К непониманию со стороны колег. Подмигивающий
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #24 : Январь 13, 2012, 13:35 »

goto вместо цикла - это здорово
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #25 : Январь 13, 2012, 13:39 »

goto вместо цикла - это здорово
Охтыжблин. А я до туда не дочитал. Зачет, чё.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
thechicho
Гость
« Ответ #26 : Январь 13, 2012, 13:43 »

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

вы грите, руководствуясь своим подходом к написанию кода.
вы лучше по делу скажите, как это может повлиять на саму работу программы: производительность, стабильность.
понятность кода 100% у меня Показает язык
« Последнее редактирование: Январь 13, 2012, 13:44 от thechicho » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #27 : Январь 13, 2012, 13:52 »

В одном потоке вызывается GET, а в другом POST. Подмигивающий
Не пиши так, даже для себя. GOTO никогда не нужен. А если и нужен, значит у тебя мысль не туда пошла.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
andrew.k
Гость
« Ответ #28 : Январь 13, 2012, 13:55 »

Это влияет на понимание кода другим человеком или тобой же самим немного погодя)
Вот сиди ищи где ты воткнул эту метку. Какой может быть холивар?

Я знаю только один удобный случай применения goto. Это выход из вложенных циклов.
Это очень соблазнительно использовать его.

вы грите, руководствуясь своим подходом к написанию кода.
вы лучше по делу скажите, как это может повлиять на саму работу программы: производительность, стабильность.
понятность кода 100% у меня Показает язык
Это общепринятые подходы.
Я уж было подумал, что ты стал беспокоиться о своем коде, что завел такую тему. А нет все в порядке)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #29 : Январь 13, 2012, 13:57 »

куда прозрачнее там будет использовать рекурсию. конечно, для этого придётся немного переписать код.

я бывает использую goto для выхода из вложенных циклов (о, выше как раз написали об этом Улыбающийся ), чтобы не разводить булевские переменные. в питоне с этим дело обстоит поприятнее Подмигивающий
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: 1 [2] 3 4   Вверх
  Печать  
 
Перейти в:  


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