Qt学习笔记-仿大佬读取setting文件(简单工厂模式)
文件如下:
程序运行截图如下:
代码如下:
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QHostAddress>class QSettings;namespace Ui {
class Widget;
}class ServerConfig:public QObject
{Q_OBJECT
public:ServerConfig();~ServerConfig();static ServerConfig &instance();void loadConfig(QString config);QHostAddress m_address;quint16 m_port;quint16 m_threads;int m_maxConnections;private:void parseConfig(const QString &config);};class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;
};#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QSettings>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);ServerConfig &config=ServerConfig::instance();config.loadConfig("server.conf");qDebug()<<"address:"<<config.m_address;qDebug()<<"port:"<<config.m_port;qDebug()<<"threads:"<<config.m_threads;qDebug()<<"maxConnections:"<<config.m_maxConnections;
}Widget::~Widget()
{delete ui;
}ServerConfig::ServerConfig()
{}ServerConfig::~ServerConfig()
{}ServerConfig &ServerConfig::instance()
{static ServerConfig config;return config;
}void ServerConfig::loadConfig(QString config)
{if(config.isEmpty()||!QFile::exists(config)){config="server.conf";if(!QFile::exists(config)){qDebug()<<"ServerConfig::loadConfig failed: no"<<config;return;}}parseConfig(config);
}void ServerConfig::parseConfig(const QString &config)
{QSettings conf(config,QSettings::IniFormat);conf.beginGroup("server");QString strHost=conf.value("host","localhost").toString();if(!strHost.isEmpty()&&!m_address.setAddress(strHost)){m_address=QHostAddress::LocalHost;}m_port=conf.value("port",8088).toUInt();m_threads=conf.value("worker_threads",4).toUInt();m_maxConnections=conf.value("connections",200).toInt();conf.endGroup();
}
思路:这里面ServerConfig并不是完全的解耦和。我们还是知道他内部的部分细节。
逻辑:让ServerConfig生成一个instance,然后在loadConfig,这个逻辑十分简单!
Qt学习笔记-仿大佬读取setting文件(简单工厂模式)相关推荐
- QT学习笔记(八)资源文件
一.创建工程 创建工程时,打开"generate form",即创建界面 创建完成后可以看到:多了一个forms文件夹,里面有mainwindow.ui文件 并且:pro文件里也会 ...
- Qt工作笔记-仿大佬风格代码(使用#ifdef Q_OS_WIN32)
程序运行截图如下: 代码如下: #include <QApplication> #include <QDebug>int main(int argc, char *argv[] ...
- pandas学习笔记四之读取写入文件
- QT学习笔记(摘抄)
QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...
- Qt学习笔记之文件处理
Qt提供了通用的文件处理类QFile和处理文本的QTextStream类和处理二进制数据的QDataStream类,这些流操作极大地方便了对文件的督促存储.对文件信息和目录进行操作的类是QfileIn ...
- QT学习笔记之对话框
QT学习笔记之对话框 对话框是一种用户界面(窗口),它的主要功能是输出信息和接收用户的输入.在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互. 1) 模式对话框:用户只能与 ...
- 【QT学习笔记】基于QT的天气预报
[QT学习笔记]基于QT的天气预报 前言 那就开始吧! 先看一下效果 颜面最重要,画个UI 构造实现 怎么开始? 开始解析数据 关于城市切换 ok 最后源码献上 感谢 前言 学习qt已经有一段时间了, ...
- Qt学习笔记,Qt国际化
Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\ ...
- C# 学习笔记(12)hex文件转bin文件小工具
C# 学习笔记(12)hex文件转bin文件小工具 hex文件格式 hex文件格式网上有很多 我这里参考HEX文件格式详解https://blog.csdn.net/weixin_39752827/a ...
最新文章
- 【error】error: field * has incomplete type
- 【评论】一个老程序员的建议
- 【降维解法:最大字段和-最大子矩阵和-最终版最大子长方体和】【UVA10755】Garbage Heap...
- Tomcat在修改代码后不会自动reload解决办法
- 大数据学习笔记39:Hive - 内置函数(2)
- Android M(6.0) 权限相关
- 快速排序(Quick Sort)附C语言代码
- 橘子origin游戏平台如何绑定登陆验证/二次验证码?
- Vue项目中使用xlsx实现批量导入导出功能
- 如何压缩图片大小不改变清晰度?怎样一键压缩图片?
- 日本风俗业数据_神奇宝贝如何融入日本民俗
- android 拔插键盘自动切换输入法
- linux cut指令
- (1)Proteus 8.9上的STM32仿真系列(HAL)---流水灯
- python3手动配置环境变量
- C++的 pack 与 unpack的方法
- 华硕主板如何设置开机自启_华硕主板开机启动项调整的三种方法
- python讲义学习 day02
- sap 个模块 含义 FI/CO/MM/PP/QM/WM 及其它 分别指什么模块?是干什么用的?
- HDU 1686 [KMP] --by二汪
热门文章
- 买二手房子经济实惠。
- 主机路由在计算机中的应用
- 做一个程序员,是不是“努力就会成功”?现实残酷但又必须面对!
- pl/sql developer快速输入select * from
- 管理成本降低10%,且看制造企业如何打造“智慧供应链”
- 从招行数据架构调整,详解企业急需的数据中台与5大数字化转型
- C++还是Java常常无法想起数组
- 在演唱过后的飞秋代码
- 第 5 节:前端面试指南 — Vue 篇(附面试题)
- linux系统编程 传智播客,传智播客王保明Linux培训系列教程全120集