0

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

当我运行它时,我得到的第一个是“成功”。但我没有得到最后三个中的任何一个(因为 if-else,我希望至少有一个会出现)。所以我在以 return 结尾的“if”语句中放了几个 QMSGBoxes,看看这是否是问题所在,但即使它们也没有出现。

知道为什么会这样吗?提前致谢。

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

1 回答 1

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;
}
于 2013-09-26T20:07:45.837 回答