QSettings值方法返回错误的QString

时间:2015-02-24 12:43:06

标签: qt

我有带有设置的文本文本文件,由java应用程序生成。在此文件中,有一个键db.url,其值为db.URL=jdbc\:mysql\://192.168.0.101\:3306/dbuser。我在QSettings模式下使用QSettings::Native类解析此文件,一切正常,但如果我通过value()方法读取它,则此db.URL会搞砸。无论我做什么(如果我将其转换为QStringQUrl),我都得到相同的结果:jdbcmysql//192.,168.0.1013306/user。为什么这把钥匙搞砸了?我在Qt 5.4上使用Kubuntu 14.10内核Linux desktop001 3.16.0-30-generic #40-Ubuntu SMP Mon Jan 12 22:06:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux。这是一个错误地读取键值的简单方法:

QString UePOSSesttings::ueReadDbUrl() const
{
//    QVariant dbUrl=this->value(UeDefaults::UeDbKeys::KEY_DB_URL);
    return this->value(UeDefaults::UeDbKeys::KEY_DB_URL).toString();
}

和常数:

#ifndef UEDEFAULTS
#define UEDEFAULTS

#include <QString>

namespace UeDefaults
{
    namespace UeDbKeys
    {
        static const QString KEY_DB_DRIVER="db.driver";
        static const QString KEY_DB_PASSWORD="db.password";
        static const QString KEY_DB_URL="db.URL";
        static const QString KEY_DB_DRIVER_LIB="db.driverlib";
        static const QString KEY_DB_ENGINE="db.engine";
        static const QString KEY_DB_USER="db.user";
    }
}

#endif // UEDEFAULTS

2 个答案:

答案 0 :(得分:2)

QSettings从不支持的转义序列中清除字符串,在本例中为\:。在读取值之前删除\斜杠,或者不要使用QSettings来解析不支持的文件格式。

也许不是最佳解决方案,但您可以在使用QSettings读取之前处理设置文件以转义所有\:

QFile oldSettings("settings.txt");
oldSettings.open(QIODevice::ReadOnly);
QString data = QString::fromAscii(oldSettings.readAll().constData());
oldSettings.close();

data.replace("\\:", "\\\\:");

QFile newSettings("/tmp/settings.txt");
newSettings.open(QIODevice::WriteOnly);
newSettings.write(data.toAscii(), data.size());
newSettings.close();

答案 1 :(得分:0)

我做到了:

void UePOSSesttings::ueParseData(const QString& filename)
{
    QFile settingsFile(filename);
    QString data;

    settingsFile.open(QIODevice::ReadOnly);
    data=QString::fromLatin1(settingsFile.readAll().constData());
    data.replace("\\:",
                 ":");
    this->ueSetParsedData(data);

    qDebug() << this->ueParsedData();

    settingsFile.close();
}

现在我得到这个网址:

  

= db.url配置参数JDBC:MySQL的://192.168.0.101:3306 / DBUSER

没关系!