2013-09-26 9 views
0

Это часть базового кода QtCreator в C++ для обмена данными между клиентом и сервером TCP. Предполагается, что это последняя функция, с которой мне нужно работать. Но чтобы понять, как это работает и где происходят ошибки, я пытаюсь показать целую кучу QMessageBoxes.Не все QMessageBox в той же функции фактически отображаются

Когда я запускаю его, я получаю первый, который говорит «успех». Но я не получаю ни одного из последних трех (поскольку, если-else, я бы ожидал, что хотя бы один появится). Поэтому я поставил еще пару QMSGBoxes в операторы if, заканчивающиеся на return, чтобы проверить, не является ли это проблемой, но даже они не отображаются.

Любая идея, почему это происходит? Заранее спасибо.

void DialogLogIn::success() 
{ 

QMessageBox myBox; 
myBox.setInformativeText("Sucess."); 
myBox.setStandardButtons(QMessageBox::Ok); 
myBox.exec(); 
//return; 

qint16 blockSize = 0; 
QDataStream in(mysocket); 
in.setVersion(13); 

    if (blockSize == 0) { 
     if (mysocket->bytesAvailable() < (int)sizeof(quint16)) 
     { 
      QMessageBox box; 
      box.setInformativeText("return 1."); 
      box.setStandardButtons(QMessageBox::Ok); 
      box.exec(); 
      return; 
     } 

     in >> blockSize; 
    } 

    if (mysocket->bytesAvailable() < blockSize) 
    { 
     QMessageBox box; 
     box.setInformativeText("return 2"); 
     box.setStandardButtons(QMessageBox::Ok); 
     box.exec(); 
     return; 
    } 

    QString result; 
    in >> result; 

    if (result == "G") 
    { 
     QMessageBox box; 
     box.setInformativeText("Password Verified."); 
     box.setStandardButtons(QMessageBox::Ok); 
     box.exec(); 
    } 
    else if (result == "N") 
    { 
     QMessageBox box; 
     box.setInformativeText("Password Incorrect."); 
     box.setStandardButtons(QMessageBox::Ok); 
     box.exec(); 
    } 
    else 
    { 
     QMessageBox box; 
     box.setInformativeText("Error."); 
     box.setStandardButtons(QMessageBox::Ok); 
     box.exec(); 
    } 
} 
+0

Прошли ли вы через код в своем отладчике? –

+0

sscce.org -> Не могли бы вы предоставить автономный пример с имеющейся основной функцией, которую мы можем построить и протестировать? – lpapp

+3

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

ответ

0

Нижеприведенные работает для меня в Qt 4 и 5, Windows и OS X. Я только превратили его в автономный пример.

#include <QApplication> 
#include <QMessageBox> 
#include <QBuffer> 
#include <QScopedPointer> 

void success() 
{ 
    QScopedPointer<QBuffer> mysocket(new QBuffer); 
    QMessageBox myBox; 
    myBox.setInformativeText("Sucess."); 
    myBox.setStandardButtons(QMessageBox::Ok); 
    myBox.exec(); 

    mysocket->open(QBuffer::ReadWrite); 
    mysocket->write(QByteArray(20, 0)); 
    mysocket->seek(0); 

    qint16 blockSize = 0; 
    QDataStream in(mysocket.data()); 
    in.setVersion(13); 

    if (blockSize == 0) { 
     if (mysocket->bytesAvailable() < (int)sizeof(quint16)) 
     { 
      QMessageBox box; 
      box.setInformativeText("return 1."); 
      box.setStandardButtons(QMessageBox::Ok); 
      box.exec(); 
      return; 
     } 
     in >> blockSize; 
    } 

    if (mysocket->bytesAvailable() < blockSize) 
    { 
     QMessageBox box; 
     box.setInformativeText("return 2"); 
     box.setStandardButtons(QMessageBox::Ok); 
     box.exec(); 
     return; 
    } 

    QString result; 
    in >> result; 

    if (result == "G") 
    { 
     QMessageBox box; 
     box.setInformativeText("Password Verified."); 
     box.setStandardButtons(QMessageBox::Ok); 
     box.exec(); 
    } 
    else if (result == "N") 
    { 
     QMessageBox box; 
     box.setInformativeText("Password Incorrect."); 
     box.setStandardButtons(QMessageBox::Ok); 
     box.exec(); 
    } 
    else 
    { 
     QMessageBox box; 
     box.setInformativeText("Error."); 
     box.setStandardButtons(QMessageBox::Ok); 
     box.exec(); 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    success(); 
    return 0; 
} 
+0

Я думаю, что что-то не так с другими файлами, с которыми был связан мой код, потому что в конечном итоге у меня было что-то похожее на то, что я разместил здесь, и это сработало отлично ...: S – DDauS