QT当中的【QSetting和.ini配置文件】以及【创建Resources.qrc】
【1】 创建QT下的.qrc
点击你的项目文件名,右键点击Add New …
选择这个
一般情况下,设置为/为根目录的形式
直接在项目文件下新建目录是不行的,要在.qrc下才可以
【第一步添加前缀】
【第二步添加文件】
先在当前目录下创建几个文件夹,并在文件夹中添加相关文件,然后添加进当前.qrc的/目录下
显然可以创建多个这样的文件和目录
【2】QSetting+.qrc使用
首先在.ini里面添加配置文件的信息
配置文件里面的信息可以通过代码写入,也可以事先写入,具体看项目
【3】代码实现
废话不多说,代码里面见分晓
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTextCodec>//解决字符编码乱码问题
#include<QSettings>//用于设置配置文件和注册表等
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public slots:
private:
Ui::MainWindow *ui;
QTextCodec *codec;
QString Name;
unsigned char Age;
};
#endif // MAINWINDOW_H
mainwindow.cpp
//=============================QSetting 和 .ini配置文件配合使用范例
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QString>
#include<QDebug>//控制台输出
#include<QList>//数组
#include<QStringList>
struct Student {
Student() {
}//构造函数
Student(QString name, int age) : name(name), age(age) {
}//构造重载函数 且参数列表初始化
QString name;
int age;
void print() {
qDebug() << "name: " << name << ", age: " << age;
}
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->show();
codec = QTextCodec::codecForName("gbk");//设置字符编码
codec->setCodecForLocale(codec);
setWindowTitle(codec->toUnicode("UI学习笔记"));
/* QSettings::NativeFormat 在windows平台可以读写windows注册表
QSettings::IniFormat 可以读写ini格式的配置文件 */
//实现.ini配置文件
QSettings settings(":/filename/config.ini",QSettings::IniFormat);
QString name = QString("student")+"/"+"name";//student是.ini里面的模块名+换行符+name
QString age = QString("student")+"/"+"age";//student是.ini里面的模块名+换行符+age
//通过设置值的方式
// settings.setValue(name,"SJY");
// settings.setValue(age,"26");
//直接获取ini里面的值的方式
ui->textEdit->setFont(QFont("楷体",14));//设置字体,字号
ui->textEdit->append(codec->toUnicode(settings.value("student/1").toString().toUtf8()));
ui->textEdit->append(codec->toUnicode(settings.value("student/2").toString().toUtf8()));
ui->textEdit->append(codec->toUnicode(settings.value("student/35").toString().toUtf8()));
ui->textEdit->append(codec->toUnicode(settings.value(name).toString().toUtf8()));
ui->textEdit->append(codec->toUnicode(settings.value(age).toString().toUtf8()));
//数组方式设置配置文件ini内容和获取内容
QList<Student> stu_list;//结构体链表
//将数据压栈
stu_list.push_back(Student("Billy", 1));
stu_list.push_back(Student("Kitty", 2));
stu_list.push_back(Student("Alice", 3));
stu_list.push_back(Student("Ben", 4));
stu_list.push_back(Student("Miss", 5));
settings.beginWriteArray("studentList");//开始写,模块名studentList
for ( int i = 0; i < stu_list.size(); ++i ) {
settings.setArrayIndex(i);//设置数组索引
settings.setValue("name", stu_list.at(i).name);//根据索引找到结构体里面的匹配数据
settings.setValue("age", stu_list.at(i).age);
}
settings.endArray();//结束
ui->textEdit->append("----------------------------------------------------------------------");
//开始获取数据
QList<Student> ret_list;
int size = settings.beginReadArray("studentList");//开始读取数据
ui->textEdit->append(QString("size=")+QString::number(size));
//读取ini里面的数组
for (int i = 0; i < size+1; ++i) {
//本来设置值时大小只有5,但是我在ini文件里面增加了一个,所以改为size=6
settings.setArrayIndex(i);//=======================设置索引【第一步】
Student stu;//创建结构体变量
stu.name = settings.value("name").toString();
stu.age = settings.value("age").toInt();
//【第二部:获取值并显示】
ui->textEdit->append(codec->toUnicode(settings.value("name").toString().toUtf8()));
ui->textEdit->append(codec->toUnicode(settings.value("age").toString().toUtf8()));
ret_list.append(stu);//追加结构体
}
settings.endArray();
for ( auto &temp : ret_list )//遍历结构体数组
{
temp.print();//打印
}
ui->textEdit->append("----------------------------------------------------------------------");
//对ini的其他操作
settings.setIniCodec("UTF-8");//设置字符编码
QStringList list= settings.allKeys();//获取所有键
for(int i=0;i<list.size();i++)
{
ui->textEdit->append(list.at(i));
}
}
MainWindow::~MainWindow()
{
/*QStringList QSettings::allKeys() const // 获取所有的key
bool QSettings::contains(const QString &key) const // 判断key是否存在
void QSettings::remove(const QString &key) // 移除key
void QSettings::setIniCodec(QTextCodec *codec) // 设置编码,处理中文乱码*/
delete ui;
}
mainwidow.ui
【4】项目效果展示
程序员不可以放弃学习