Я работаю над проектом как дополнение к существующему Java-приложению. Это приложение Java имеет свой конфигурационный файл, как это:В подклассе QSettings нет ключей
screen.600800=false
payment.commerceid=
machine.printer=printer\:(Default),receipt
paper.standard.mediasizename=A4
machine.printername=(Show dialog)
payments.textoverlay=false
paper.receipt.height=546
till.receiptsize=1
swing.defaultlaf=org.pushingpixels.substance.skinpack.StreetlightsSkin
paper.standard.y=72
paper.standard.x=72
table.tablecolour=black
till.SCRate=0
format.integer=\#,\#\#0
user.language=sl
paper.receipt.width=190
till.receiptprintoff=false
db.user=user
start.text=
machine.uniqueinstance=false
menu.autohide=false
till.pricewith00=false
table.waitercolour=red
format.double=\#,\#\#0.\#
user.country=
till.amountattop=false
till.pickupsize=1
till.autoLogoffrestaurant=false
machine.screenmode=window
screen.receipt.columns=42
machine.printer.6=Not defined
machine.printer.5=Not defined
db.engine=MySQL
machine.printer.4=Not defined
user.variant=
machine.printer.3=screen
machine.printer.2=printer\:(Show dialog),standard
payment.gateway=Not defined
till.SCOnOff=false
start.logo=logo.png
format.percent=\#,\#\#0.\#\#%
db.driver=com.mysql.jdbc.Driver
table.showwaiterdetails=true
format.date=
machine.ticketsbag=simple
db.driverlib=/opt/uBlagajna/./lib/mysql-connector-java-5.1.26-bin.jar
table.showcustomerdetails=true
db.password=test
till.receiptprefix=
paper.standard.height=698
table.customercolour=blue
till.taxincluded=false
paper.standard.width=451
till.autotimer=100
machine.display=screen
payment.testmode=true
format.datetime=
machine.scanner=Not defined
machine.hostname=work002
till.autoLogoff=false
paper.receipt.y=10
paper.receipt.x=10
payment.magcardreader=Not defined
payment.commercepassword=password
format.time=
format.currency='EUR' \#,\#\#0.00
db.URL=jdbc\:mysql\://127.0.0.1\:3306/testdb
till.hideinfo=false
machine.scale=Not defined
paper.receipt.mediasizename=A4
till.SCRestaurant=false
till.marineoption=false
сейчас, что я делаю на стороне Qt C++, я не могу получить значения из ключей. Поэтому я подклассы QSettings класс, как здесь:
#ifndef UEPOSSESTTINGS_H
#define UEPOSSESTTINGS_H
#include <QtCore/qglobal.h>
#include <QSettings>
#include <QDirIterator>
#include <QStringList>
#include <QString>
#include <QFile>
#include <QDebug>
#include <QFile>
#include "settings/uedefaults.h"
class UePOSSesttings : public QSettings
{
Q_OBJECT
private:
QString m_strSettingsFilePath;
QString m_strParsedData;
QString m_strDbUrl;
inline void ueSetConfigurationFilePath(const QString& path)
{ this->m_strSettingsFilePath=path; }
inline QString ueParsedData() const
{ return this->m_strParsedData; }
inline void ueSetParsedData(const QString& data)
{ this->m_strParsedData=data; }
inline QString ueDbUrl() const
{ return this->m_strDbUrl; }
inline void ueSetDbUrl(const QString& dbUrl)
{ this->m_strDbUrl=dbUrl; }
void ueParseData(const QString& filename);
public:
UePOSSesttings(const QString& organization,
const QString & application=QString(),
QObject* parent = 0);
UePOSSesttings(const QString& fileName,
Format format,
QObject* parent = 0);
~UePOSSesttings();
static QString ueSearchConfigurationFile();
inline QString ueConfigurationFilePath() const
{ return this->m_strSettingsFilePath; }
QString ueReadDbDriver() const;
QString ueReadDbPassword() const;
QString ueReadDbUrl() const;
QString ueReadDbDriverLib() const;
QString ueReadDbEngine() const;
QString ueReadDbUser() const;
QString ueReadDbHostname() const;
QString ueReadDbName() const;
int ueReadDbPort() const;
};
#endif // UEPOSSESTTINGS_H
и реализация:
#include "uepossesttings.h"
UePOSSesttings::UePOSSesttings(const QString& organization,
const QString& application,
QObject* parent)
: QSettings(organization,
application,
parent)
{
this->setDefaultFormat(QSettings::NativeFormat);
this->ueSetConfigurationFilePath(UePOSSesttings::ueSearchConfigurationFile());
this->ueParseData(this->ueConfigurationFilePath());
}
UePOSSesttings::UePOSSesttings(const QString& fileName,
Format format,
QObject* parent)
: QSettings(fileName,
format,
parent)
{
this->ueSetConfigurationFilePath(fileName);
this->ueParseData(this->ueConfigurationFilePath());
}
UePOSSesttings::~UePOSSesttings()
{
}
QString UePOSSesttings::ueSearchConfigurationFile()
{
QDirIterator dirIterator("/home",
QStringList() << UeDefaults::UeApplication::APPLICATION_SETTINGS_FILE,
QDir::Files,
QDirIterator::Subdirectories);
while(dirIterator.hasNext())
{
dirIterator.next();
if(dirIterator.fileName()==UeDefaults::UeApplication::APPLICATION_SETTINGS_FILE)
{
return dirIterator.filePath();
} // if
} // while
return dirIterator.filePath();
}
QString UePOSSesttings::ueReadDbDriver() const
{
return this->value(UeDefaults::UeDbKeys::KEY_DB_DRIVER).toString();
}
QString UePOSSesttings::ueReadDbPassword() const
{
return this->value(UeDefaults::UeDbKeys::KEY_DB_PASSWORD).toString();
}
QString UePOSSesttings::ueReadDbUrl() const
{
return this->value(UeDefaults::UeDbKeys::KEY_DB_URL).toString();
}
QString UePOSSesttings::ueReadDbDriverLib() const
{
return this->value(UeDefaults::UeDbKeys::KEY_DB_DRIVER_LIB).toString();
}
QString UePOSSesttings::ueReadDbEngine() const
{
return this->value(UeDefaults::UeDbKeys::KEY_DB_ENGINE).toString();
}
QString UePOSSesttings::ueReadDbUser() const
{
return this->value(UeDefaults::UeDbKeys::KEY_DB_USER).toString();
}
QString UePOSSesttings::ueReadDbHostname() const
{
int iDbHostnameIndexStart=this->ueDbUrl().indexOf("//")+2;
int iDbHostnameIndexStop=this->ueDbUrl().lastIndexOf(":");
QString strHostname=this->ueDbUrl().mid(iDbHostnameIndexStart,
(iDbHostnameIndexStop-iDbHostnameIndexStart));
return strHostname;
}
QString UePOSSesttings::ueReadDbName() const
{
int iDbNameIndexStart=this->ueDbUrl().lastIndexOf("/")+1;
int iDbNameIndexStop=this->ueDbUrl().size();
QString strDbName=this->ueDbUrl().mid(iDbNameIndexStart,
(iDbNameIndexStop-iDbNameIndexStart));
return strDbName;
}
int UePOSSesttings::ueReadDbPort() const
{
int iDbPortIndexStart=this->ueDbUrl().lastIndexOf(":")+1;
int iDbPortIndexStop=this->ueDbUrl().lastIndexOf("/");
QString strPort=this->ueDbUrl().mid(iDbPortIndexStart,
(iDbPortIndexStop-iDbPortIndexStart));
return strPort.toInt();
}
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);
int iDbUrlIndexStart=data.indexOf(UeDefaults::UeDbKeys::KEY_DB_URL);
int iDbUrlIndexStop=data.indexOf("\n",
iDbUrlIndexStart);
QString strDbUrl=data.mid(iDbUrlIndexStart,
(iDbUrlIndexStop-iDbUrlIndexStart));
this->ueSetDbUrl(strDbUrl);
settingsFile.close();
}
Теперь, все, что я делаю, Я, что короткий метод с помощью ueRead
...., например, ueReadUser()
возвращает пустую строку. Кто-нибудь знает, что я делаю неправильно?
Это не так, как вы черпаете 'QSettings'. [Так вы получаете QSettings] (http://doc.qt.io/qt-5/qsettings.html#registerFormat). – Amartel
@Amartel у вас есть пример, потому что я понятия не имею, как реализовать 'readFunc' и' writeFunc' – KernelPanic
Не уверен, что это помогает, но это [моя реализация XmlSettings] (https://yadi.sk/ д/8aEmohpzi7QyZ). – Amartel