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】项目效果展示

在这里插入图片描述
程序员不可以放弃学习

猜你喜欢

转载自blog.csdn.net/m0_45463480/article/details/125412219