QT中手动异常管理

343 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

QT中有自己的异常类:QException这个类中会记录一些异常信息(废话),但这些异常信息有时候不是我们所需要的,我们可能更加需要一些自定义的信息,例如记录一些状态码的错误日志等等。 下面举个栗子:

    QJsonParseError error;
    const QJsonDocument document = QJsonDocument::fromJson(json.toUtf8(),&error);//解析json
    /*----------------------不用看-----------------*/
    if(error.error==QJsonParseError::NoError)//当解析json没有错误时
    {
        const QJsonObject &obj = document.object();

        const QString name = obj.value(QStringLiteral("name")).toString();
        int age = obj.value(QStringLiteral("age")).toInt();

        const QJsonObject &insideObject = obj.value(QStringLiteral("langurage")).toObject();
        QJsonArray array = insideObject.value(QStringLiteral("国籍")).toArray();
        QList<QString> ll;
        for(const QJsonValue &ss : array)
        {
            ll.append(ss.toString());
        }
        return Formgramer(name,age,ll);

    }
    /*------------------------------------------------*/
    qDebug()<<"error"<<endl;
    throw error.errorString();

这是一个解析JSon的函数实现,这里如果解析出错就会向外抛出一个错误字符串,然后在使用这个函数的地方使用try catch 来接收就可以实现自己想要的错误提示了:

    try {
        xxx
        }
    } catch (QString &ex) {
        Log::cin_httplog( QDateTime::currentDateTime().toString("yyyy-MM-dd hh.mm.ss ") + "发送失败"+ex); //输出到txt文件
        return false;
    }

这里我是输出到日志中的,也可以输出到控制台:

qDebug()<<ex<<endl;

抛出异常的地方也可以写成:

throw "oh! have error";

使用自己能辨识的异常,也可以快速定位到出现问题的代码,如果不嫌麻烦的话也可以在输出的信息前面加上文件名,函数名之类的前缀。