并非所有QMessageBox都在同一功能中实际出现

时间:2013-09-26 15:49:41

标签: qt qt-creator qtcpsocket qmessagebox

这是用于TCP客户端 - 服务器通信的C ++中基本QtCreator代码的一部分。 这应该是我需要工作的最后一个功能。但要了解这是如何工作的以及错误的位置,我试图展示一大堆QMessageBoxes。

当我运行它时,我得到第一个说“成功”的人。但我没有得到最后三个中的任何一个(因为如果 - 否则,我希望至少有一个出现)。所以我在以if结尾的'if'语句中添加了几个QMSGBox,以查看问题是否存在,但即使它们没有出现。

为什么这是hapening?提前谢谢。

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();
    }
}

1 个答案:

答案 0 :(得分: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;
}