рд▓рдЧрднрдЧ рд╣рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд▓рдЧрд╛рддрд╛рд░ рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЙрдарддрд╛ рд╣реИред рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕рд░рд▓ рд╣реИрдВ, рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ Qt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Qt рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓, рд▓рдЪреАрд▓рд╛ рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд╕рднреА рд╕рд╛рдзрди рд╣реИрдВред
рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдкрд░рд┐рдЪрдп
Qt рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ
QSettings рдХреНрд▓рд╛рд╕ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:
int main(int argc, char *argv[]){
void func(){ QSettings conf; ...
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ,
QSettings рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ, рдЖрдк рддреБрд░рдВрдд рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдФрд░ рдХреЛрдб рд╕рдорд░реНрдерди рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:
- рдпрджрд┐ рдХреЛрдб рдореЗрдВ рдореБрдЦреНрдп рдирд╛рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рддреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ / рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдпрд╛рдиреА рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рди рдЪрд░рдг рдкрд░ рдЕрдорд╛рдиреНрдп рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
- # 1 рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдб рдХреА рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рд▓рд╛рдиреЗ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд░рдЦрдирд╛ рднреА рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ред
namespace Settings{ const char * const key1 = "key1"; const char * const section1_key1 = "section1/key1"; const char * const section1_key2 = "section1/key2"; }
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рд╕реБрдЦрдж рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИ:
* рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛, рдЕрд░реНрдерд╛рддреНред рдЬрд╛рдирдХрд╛рд░реА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИ (рдХреА 1 -> "рдХреА 1", рдЖрджрд┐)ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдкреНрд░рдореБрдЦ рдирд╛рдореЛрдВ рдХреЗ рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИред рд╣рд╛рдВ, рд╣рдо рдПрдХ рдореИрдХреНрд░реЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдХреНрд░реЛрдЬрд╝ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред
* рджреВрд╕рд░реЗ, рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рднреА рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рд╣рдо рдХреБрдВрдЬреА рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░, QSettings рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ: рдХреБрдВрдЬреА рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рдЕрдЧрд░ рд╣рдо рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдирдо (
enum s) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
Enumerations рдмреЗрд╢рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди
QSettings рдХреЛ рдПрдХ рдкреНрд░рдореБрдЦ рдкреИрд░рд╛рдореАрдЯрд░, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╛рдиреА рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕реЗ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдПрдиреНрдпреВрдорд░реЗрд╢рдВрд╕ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ (рдПрдиреНрдпреВрдорд░реЗрд╢рдиреНрд╕ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдЧрдгрдирд╛ рд╕реЗ:
enum Key{ One, Two, Three };
рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ 3 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: "рдПрдХ", "рджреЛ", "рддреАрди"ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдорд╛рдирдХ C ++ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд░реЗрдВ?
рдпрд╣рд╛рдБ Qt рдЕрдкрдиреЗ рдореЗрдЯрд╛-рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдпрд╛
QMetaEnum рдХреЗ рд╕рд╛рде рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореИрдВ
QMetaEnum рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ
рд▓рд┐рдЦреВрдВрдЧрд╛ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ:
рдПрдХ ,
рджреЛ ред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕реЗрд╡рд╛ рдореЗрдВ
QMetaEnum рдХреЗ рд╕рд╛рде, рд╣рдо рдЕрдм
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдиреБрдХрд╕рд╛рдиреЛрдВ рд╕реЗ рд░рд╣рд┐рдд, рд╕рд╛рде рд╣реА рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреНрд▓рд╛рд╕ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдореЗрдпрд░реНрд╕ рд╣реИ, рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╣реЛрддреА рд╣реИ:
settings.h (рд╕реНрдкреЙрдЗрд▓рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ) #ifndef SETTINGS_H #define SETTINGS_H #include <QVariant> #include <QSettings> #include <QMetaEnum> /** @brief Usage: @code ... ... // ( - main) QApplication::setOrganizationName("Organization name"); QApplication::setApplicationName("App name"); ... ... // ( ) Settings::setDefaults("SomeKey: value1; SomeSection/SomeKey: value2"); // QFile f(":/defaults/config"); f.open(QIODevice::ReadOnly); Settings::setDefaults(f.readAll()); ... ... void fun(){ ... QVariant val1 = Settings::get(Settings::SomeKey); Settings::set(Settings::SomeKey) = "new val1"; ... QVariant val2 = Settings::get(Settings::SomeKey, Settings::SomeSection); Settings::set(Settings::SomeKey, Settings::SomeSection) = "new val2"; ... } @endcode */ class Settings{ Q_GADGET Q_ENUMS(Section) Q_ENUMS(Key) public: enum Section{ General, Network, Proxy }; enum Key{ URI, Port, User, Password }; class ValueRef{ public: ValueRef(Settings &st, const QString &kp) : parent(st), keyPath(kp){} ValueRef & operator = (const QVariant &d); private: Settings &parent; const QString keyPath; }; static void setDefaults(const QString &str); static QVariant get(Key, Section /*s*/ = General); static ValueRef set(Key, Section /*s*/ = General); private: QString keyPath(Section, Key); static Settings & instance(); QMetaEnum keys; QMetaEnum sections; QMap<QString, QVariant> defaults; QSettings conf; Settings(); Settings(const Settings &); Settings & operator = (const Settings &); }; #endif // SETTINGS_H
settings.cpp (рд╕реНрдкреЙрдЗрд▓рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ) #include "settings.h" #include <QSettings> #include <QMetaEnum> #include <QRegExp> #include <QStringList> Settings::Settings(){ const QMetaObject &mo = staticMetaObject; int idx = mo.indexOfEnumerator("Key"); keys = mo.enumerator(idx); idx = mo.indexOfEnumerator("Section"); sections = mo.enumerator(idx); } QVariant Settings::get(Key k, Section s){ Settings &self = instance(); QString key = self.keyPath(s, k); return self.conf.value(key, self.defaults[key]); } Settings::ValueRef Settings::set(Key k, Section s){ Settings &self = instance(); return ValueRef(self, self.keyPath(s, k)); } void Settings::setDefaults(const QString &str){ Settings &self = instance(); //section/key : value //section - optional QRegExp rxRecord("^\\s*(((\\w+)/)?(\\w+))\\s*:\\s*([^\\s].{0,})\\b\\s*$"); auto kvs = str.split(QRegExp(";\\W*"), QString::SkipEmptyParts); //key-values for(auto kv : kvs){ if(rxRecord.indexIn(kv) != -1){ QString section = rxRecord.cap(3); QString key = rxRecord.cap(4); QString value = rxRecord.cap(5); int iKey = self.keys.keyToValue(key.toLocal8Bit().data()); if(iKey != -1){ int iSection = self.sections.keyToValue(section.toLocal8Bit().data()); if(section.isEmpty() || iSection != -1){ self.defaults[rxRecord.cap(1)] = value; } } } } } //Settings::ValueRef----------------------------------------------------------- Settings::ValueRef & Settings::ValueRef::operator = (const QVariant &data){ parent.conf.setValue(keyPath, data); return *this; } //PRIVATE METHODS-------------------------------------------------------------- QString Settings::keyPath(Section s, Key k){ auto szSection = sections.valueToKey(s); auto szKey = keys.valueToKey(k); return QString(s == General ? "%1" : "%2/%1").arg(szKey).arg(szSection); } Settings & Settings::instance(){ static Settings singleton; return singleton; }
рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ,
QSettings рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ
QSettgins рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрдВрддреНрд░, рдЬреИрд╕реЗ рдХрд┐
SQLite рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд░реНрдЧ рдХреЗрд╡рд▓ рддреАрди рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
void setDefaults(const QString &str);
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдирд╛
QVariant get(Key, Section);
- рдорд╛рди рдкрдврд╝рдирд╛ (рдЕрдиреБрднрд╛рдЧ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
ValueRef set(Key, Section);
- рдореВрд▓реНрдп рдХрд╛ рд░рд┐рдХреЙрд░реНрдб (рдЕрдиреБрднрд╛рдЧ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
#include <QtCore/QCoreApplication> #include <QUrl> #include <QFile> #include "settings.h" void doSome(){ // General QString login = Settings::get(Settings::User).toString(); // login == "unixod" QUrl proxyUrl = Settings::get(Settings::URI, Settings::Proxy).toUrl(); // http://proxy_uri QString generalUrl = Settings::get(Settings::URI).toString(); // if(generalUrl.isEmpty()) Settings::set(Settings::URI) = "http://some_uri"; } int main(int argc, char *argv[]){ // QSettings QCoreApplication::setOrganizationName("unixod"); QCoreApplication::setApplicationName("app"); // : QFile cfgDefaults(":/config/default.cfg"); // cfgDefaults.open(QIODevice::ReadOnly); Settings::setDefaults(cfgDefaults.readAll()); //... doSome(); //... return 0; }
рдпрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд┐рд╡рд░рдг рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
default.cfg (рд╕реНрдкреЙрдпрд▓рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ) рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдкреНрд░рд╛рд░реВрдк рд╕рд░рд▓ рд╣реИ:
[section name]/key : value;
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд░реНрдЧ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рд╣реИред рдпрд╛рдиреА рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдХрд┐рд╕реА рднреА рдХреБрдВрдЬреА рдпрд╛ рдЕрдиреБрднрд╛рдЧ рдХреЛ
рдЬреЛрдбрд╝реЗрдВ /
рд╣рдЯрд╛рдПрдВ /
рдирд╛рдо рдмрджрд▓реЗрдВ ,
рдмрд╕ рд╕рдВрдмрдВрдзрд┐рдд рдПрдирдо рдХреЛ рдмрджрд▓ рджреЗрдВ !
рдкрд╛рдардХ рдпрд╣ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ "рдХреЛрд╖реНрдардХ рд╕реЗ рдмрд╛рд╣рд░" рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдЙрддреНрддрд░: рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рд▓реЗрдХрд┐рди рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рдХреНрдпреВрдЯреА рдореЗрдЯрд╛-рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЙрд▓рдЭрд╛рддрд╛ рд╣реИ:
- рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрдЯрд┐рд▓рддрд╛
- рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рдХрдард┐рдирд╛рдИ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг
- рдкрдврд╝рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ, рдХреЛрдб
- рдЖрджрд┐
рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, C ++ 11 рд╕рдорд░реНрдерди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛:
- рдЬреАрд╕реАрд╕реА:
-std = c ++ 0x - Qt рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓:
QMAKE_CXXFLAGS + = -std = c ++ 0x
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред )