我有带有设置的文本文本文件,由java应用程序生成。在此文件中,有一个键db.url
,其值为db.URL=jdbc\:mysql\://192.168.0.101\:3306/dbuser
。我在QSettings
模式下使用QSettings::Native
类解析此文件,一切正常,但如果我通过value()方法读取它,则此db.URL
会搞砸。无论我做什么(如果我将其转换为QString
或QUrl
),我都得到相同的结果: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
答案 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
没关系!