精华内容
下载资源
问答
  • qt 配置文件读写操作

    2021-03-17 15:08:40
    ini文件读写 xml文件读写 json 文件读写 数据结构保存到二进制文件 并读取 sqlite 数据库文件读取

    ini文件读写
    xml文件读写
    json 文件读写
    数据结构保存到二进制文件 并读取
    sqlite 数据库文件读取

    Qt二进制文件操作(读和写)详解(.stm和.dat文件)
    https://blog.csdn.net/weixin_38293453/article/details/104175328

    < Qt5.9 C++开发指南 > 第7 章
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 使用 QDomElement 读写xml 结构文件 源码可以直接使用, 也可以编译成自己所需要的类型库 代码已封装, 可以外部调用 上传了 win的 和 linux 的 relase 和 debug 版本. 但只有 x64 的, 需要win32的 自己编译.
  • Qt txt文件读写

    千次阅读 2012-12-17 16:54:09
    本文主要在于总结文件读写的细节,借助于树结构来呈现出文件读写的用法和用途,当然可以用QSetting 来实现,也比较简单,但是没有下面的方法通用~重在积累!   windows下的txt文本,包括ini文件,都不能通过Tab...

      本文主要在于总结文件读写的细节,借助于树结构来呈现出文件读写的用法和用途,当然可以用QSetting 来实现,也比较简单,但是没有下面的方法通用~重在积累!

     

    windows下的txt文本,包括ini文件,都不能通过Tab键输入“\t”,在ubuntu下的gedit可以通过tab键输入制表符"\t"

    如下文本(default.txt):

     节点1     ***( 名称)      ****(数据)

            12343     温度      12.3

            2345       湿度       1212  

    //文件读:

    #include<QtGui>

    MyWidget::MyWidget()

    {

    QFile file("default.txt");

    	file.open(QIODevice::ReadOnly);
    	//dataFromFile=new QString;
    	dataFromFile=file.readAll();
    	file.close();
    	QList<QVariant> rootData;
        rootData<<"节点"<<"类型"<<"数据";
    //qDebug()<<rootData;
    	rootItem = new TreeItem(rootData);
    	setupModelData(dataFromFile.split(QString("\n")),rootItem);
    
    
            QTreeWidget myTreeWidget=new QTreeWidget;
           ....显示部分不在累述,根据需要可以简单实现
    
    }

    void MyWidget::setupModelData(constQStringList&lines,TreeItem*parent)

    {
    	QList<TreeItem*> parents;
    	QList<int> indentations;
    	parents<<parent;
    	indentations<<0;
    
    int number=0;
    
    	while(number<lines.count()){
    		int position=0;
            while(position<lines[number].length()){//分级目录是通过空格来确定的,这里设置每一级在上一级的基础上空4个空格,这里做的是去空格 " "
    			if(lines[number].mid(position,1)!=" ")
    				break;
    			position++;		
    		}
    	
    		QString lineData=lines[number].mid(position).trimmed();
    		if(!lineData.isEmpty()){
                QStringList columnStrings=lineData.split("\t",QString::SkipEmptyParts);//去掉字符为空的部分
    			QList<QVariant> columnData;
    			for(int column=0;column<columnStrings.count();++column)//
    				columnData<<columnStrings[column];
    			if(position>indentations.last()){
    //这里要好好理解下
    				if(parents.last()->childCount()>0){
    					parents<<parents.last()->child(parents.last()->childCount()-1);
    					indentations<<position;
    				}
    			}
    			else{
    				while(position<indentations.last()&&parents.count()>0){
    					parents.pop_back();
    					indentations.pop_back();
    				}
    			}//else
    			parents.last()->appendChild(new TreeItem(columnData,parents.last()));//添加结点
    		}
    		number++;	
    	}
    
    }
    

    //文件写,读写很相似,但写更要注意细节

    void MyWidget::writeTree()

    {

    	QFile file("default.txt");   
    	if(!file.open(QIODevice::ReadWrite | QIODevice::Text)) {   
    		qDebug()<<"Can't open the file!"<<endl;   
    	}   
    	file.resize(0);
    	QTextStream stream(&file);
    	
    	int count=rootItem->childCount();
    	parentItem=rootItem;
    	qDebug()<<"write ....";
    	for (int i=0;i<count;i++)
    	{
    		QList<QVariant> list=parentItem->child(i)->dataAll();
             for (int k = 0; k < 3/*list.size()*/; ++k) {
    			QVariant dataItem=list.at(k);
    qDebug()<<list.at(k);
         			stream<< dataItem.toString()<<"\t";		 
    		 }
             QVariant dataItem=parentItem->data(0);
             stream<<dataItem.toString()<<"\t";
    		list.clear();
    		/*QListIterator<QVariant > k(list);
    		k.toFront();
    		 while (k.hasNext())
    		{	QVariant dataItem=k.next();
    qDebug()<<k.next();
         			stream<< dataItem.toString();
    		}
    		while ( !list2.isEmpty() )
      				 delete list2.takeFirst();
    */
    qDebug()<<"for i...";		
    		stream<<"\n";
    		
    		for(int j=0;j<parentItem->child(i)->childCount();j++)
    		{
    			stream<<QString("    ");
    			QList<QVariant> list2=parentItem->child(i)->child(j)->dataAll();
                 for (int m = 0; m < 4/*list2.size()*/; ++m) {
    				QVariant dataItem=list2.at(m);
    qDebug()<<list2.at(m);
         				stream<< dataItem.toString()<<"\t";		 
    			}
                 QVariant dataItem=parentItem->child(i)->data(0);
                 stream<<dataItem.toString()<<"\t";
    			list2.clear();
    			stream<<"\n";
    //qDebug()<<"\n";
    		}
    	}
    	
    	//stream.seek(readPos); 
    	//stream <<line_in;
    	file.flush();
    	file.close();
    }
    



    TreeItem.h

    #ifndef TREEITEM_H

    #define TREEITEM_H
    #include<QList>
    #include<QVariant>
    class TreeItem
    {
    public:
    	TreeItem(const QList<QVariant> &data,TreeItem *parent=0);
    	~TreeItem();
    	void appendChild(TreeItem *child);
    	void removeChild(int position);
    	TreeItem *child(int row);
    	int childCount() const;
    	int columnCount() const;
    	QVariant data(int column) const;
    	int row() const;
    	TreeItem *parent();
    	bool m_checked;
    	bool isChecked();
    	void setCheckState(bool state);
    	QList<QVariant> dataAll();
    private:
    	QList<TreeItem*> childItems;
    	QList<QVariant> itemData;
    	TreeItem *parentItem;
    };
    #endif
    
    

    TreeItem.cpp

    #include <QStringList>

    #include "treeitem.h"
    TreeItem::TreeItem(const QList<QVariant> &data,TreeItem *parent)
    {
    	parentItem=parent;
    	itemData=data;
    	QVariant dataItem=itemData.at(1);
    	if(!dataItem.isNull())
    		m_checked=dataItem.toBool();
    	else 
    		m_checked=true;
    }
    TreeItem::~TreeItem()
    {
    	qDeleteAll(childItems);
    }
    void TreeItem::appendChild(TreeItem *item)
    {
    	childItems.append(item);
    }
    void TreeItem::removeChild(int position)
    {
    	/*int k=0;
    	 for (; k < childItems.size(); ++k) 
    			if(childItems.at(k)==item)
    				break;
    	if(k<childItems.size())	
    	*/
    	childItems.removeAt(position);
    }
    TreeItem *TreeItem::child(int row)
    {
    	return childItems.value(row);
    }
    int TreeItem::childCount() const
    {
    	return childItems.count();
    }
    int TreeItem::columnCount() const
    {
    	return itemData.count();
    }
    QList<QVariant> TreeItem::dataAll()
    {
    	return itemData;
    }
    QVariant TreeItem::data(int column)const
    {
    	return itemData.value(column);
    }
    TreeItem *TreeItem::parent()
    {
    	return parentItem;
    }
    int TreeItem::row() const
    {
    	if(parentItem)
    		return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
    	return 0;
    }
    bool TreeItem::isChecked()
    {
    	return m_checked;
    }
    void TreeItem::setCheckState(bool state)
    {
    	m_checked=state;
    	QVariant dataItem=itemData.at(1);
    	QVariant check=QVariant(state);
        if(dataItem.isNull())
        //	itemData[1]=check;
        //else
    		m_checked=true;
    }



    
    

    展开全文
  • 文件结构相同的文本皆可以. 已经封装起来了.可以直接使用. 这是头文件. 下载链接:https://download.csdn.net/download/yuansacsdn/11852317 #include <QSharedPointer> #include <QtXml/QDomElement...

     QT使用 QDomElement 读写 xml 文件. 或文件结构相同的文本皆可以.

    已经封装起来了.可以直接使用.  这是头文件.

    下载链接:  https://download.csdn.net/download/yuansacsdn/11852317

    #include <QSharedPointer>
    #include <QtXml/QDomElement>
    class QString;
    
    class  ParserConifg 
    {
    public:
    	ParserConifg();
    	~ParserConifg();
    public:
    	virtual bool load();
    	virtual bool save();
    
    	/// \brief: 设置当前配置文件的路径文件名
    	bool setFileName(const QString &filePath);
    	/// \brief: 读配置文件
    	bool readFile();
    
    	/// \brief: 获得父节点下的某个子节点
    	/// \param: node 父节点
    	/// \param: childNodeName 子节点名字
    	/// \param: childeNode 获得子节点
    	bool getChildElement(const QDomElement &node, const QString &childNodeName, QDomElement &childNode);
    	
    	/// \brief: 获得节点下某个子节点的一个属性值
    	/// \param: node 父节点
    	/// \param: childNodeName 子节点名字
    	/// \param: attribName 属性名字
    	/// \param: attribValue 属性值
    	bool getChildAttribValue(const QDomElement &node, const QString &childNodeName,
    									const QString &attribName, QString &attribValue);
    
    	/// \brief: 获得当前节点下的属性值
    	/// \param: node 操作节点
    	/// \param: attribName 属性名字
    	/// \param: attribValue 属性值
    	bool getAttribValue(const QDomElement &node, const QString &attribName, QString &attribValue);
    
    	/// \brief: 获得节点下某个子节点的中间值
    	/// \param: node 父节点
    	/// \param: elementName 子节点名字
    	/// \param: elementValue 中间值 
    	bool getChildElementValue(const QDomElement &node, const QString &elementName, QString &elementValue);
    
    	/// \brief: 获得当前节点的中间值
    	/// \param: node 操作节点
    	/// \param: elementValue 中间值 
    	bool getElementValue(const QDomElement &node, QString &elementValue);
    
    	/// \brief: 创建新的配置文件
    	/// \brief: rootName 根节点
    	bool createNewConfig(const QString &rootName);
    	
    	/// \brief: 添加一个子节点
    	/// \param: node 父节点
    	/// \param: nodeName 子节点名
    	QDomElement addElement(QDomElement &node, const QString &nodeName);
    	
    	/// \brief: 为当前节点添加属性
    	/// \param: node 操作节点
    	/// \param: nodeValueName ,nodeValue 属性名字和属性值
    	bool setAttribValue(QDomElement &node, const QString &nodeValueName, const QString &nodeValue);
    	
    	/// \brief: 为当前节点添加中间值
    	/// \param: node 操作节点
    	/// \param: elementValue 中间值 
    	bool setElementValue(QDomElement &node, const QString &elementValue);
    
    	/// \brief: 保存配置文件
    	bool saveFile();
    
    public:
    	QDomElement readRootNode_;		// 读配置的的根节点	
    	QDomElement saveRootNode_;		// 写配置文件的根节点
    private:
    	class PImpl;
    	QSharedPointer<PImpl> impl_;
    };

     

    展开全文
  • 二进制文件存储方式比较方便,文本小,保密效果好 定义一个数据结构并实现相关操作 使用QDataStream进行读写操做 数据结构 #include struct AccountInfo { // 数据 QString Account; QString LogPasswd; // 初始...
  • Qt读写INI文件

    2019-12-14 11:00:19
    读写INI配置文件可以增强软件配置的灵活性,INI文件的基本结构如下: Qt读写ini文件的类是QSettings,使用该类时先包含它的头文件名 #include <QSettings> 。 QSettings类的简单使用方法如下,请记住以下...

    读写INI配置文件可以增强软件配置的灵活性,INI文件的基本结构如下:

    Qt读写ini文件的类是QSettings,使用该类时先包含它的头文件名 #include <QSettings> 。

    QSettings类的简单使用方法如下,请记住以下几个函数即可:

    构造函数 ,用来指定INI文件名。

    QSettings(const QString &fileName, Format format, QObject *parent = Q_NULLPTR);

    公共函数如下:

    QString fileName() const                           //获取读写ini文件的程序所在的路径
    void beginGroup(const QString &prefix)   //开始的节点名
    void setValue(const QString &key, const QVariant &value)  //写入键名、键值
    QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const  //根据键名读键值
    void endGroup()  //结束读 | 写操作

    #include <QSettings>
    
    QSettings* setting = new QSettings("INI_config.ini", QSettings::IniFormat);
    
    //获取ini文件的路径
    QString path = setting->fileName();
    
    //读ini文件
    setting->beginGroup("YXQ");
    QString group_addr = setting->value("group_addr").toString();
    QString remote_ip = setting->value("remote_ip").toString();
    QString port = setting->value("port").toString();
    setting->endGroup();
    
    //写ini文件
    setting->beginGroup("节点名");
    
    setting->setValue("键名", "键值");
    
    setting->endGroup();
    
    

     

    展开全文
  • Qt 中用Setting写ini文件用以保存软件配置信息是个很方便的信息,一般读写单个值,都很简单,到处都可以找到资料,但对于自定义的结构体如何使用QSetting写入ini和读出,资料较少,下面是我整理且测试成功的方法. ...
  • QT 读写CSV文件

    千次阅读 2020-05-14 17:42:11
    目录 一、CSV的结构 ...CSV文件通过","分开列,通过换行符(\t\n)分开行,这就是CSV文件结构。 所以解析的时候,也是根据CSV文件结构解析: ①根据换行符号将数据分割为行数据集; ②根据逗号
  • 如何往ini文件读写数据 static const wchar_t *c_strName = L"Login"; static QString cofigFilePath ="xx/xxx" //ini文件路径 比如ini里的结构是这样子的 [Login] ComputerName= HostName= HostIP= node就是...
  • 以下是Qt中,文件系统的结构图: 文件系统结构图 QFile读文件 //Widget.h #ifndef WIDGET_H #define WIDGET_H #pragma execution_character_set("utf-8") #include <QWidget> #include <QGridLayout> #...
  • QT中XML的读写

    千次阅读 2017-11-20 10:19:13
    最近工作的项目中涉及到了XML文件的处理,这里做以及关于QT处理XML文件的记录。 XML是一种很好的存储数据的文件。可以存储数据量较大的并且带有不同属性的内容,其中XML采用的是倒树形结构。由一个根节点往后蔓延多...
  • QDir类用来访问目录结构及其内容,可以操作路径名、访问路径和文件相关信息以及操作底层的文件系统,还可以访问Qt的资源系统。Qt使用“/”作为通用的目录分隔符和URLs的目录分隔符,如果使用“/”作为目录分隔符,Qt...
  • 1 老版的Qt提供了两种访问XML文件的方式:DOM和SAX。 2 DOM 方式:将 XML 文档转换为树形结构存储到内存中,再进行读取,消耗的内存比较多。此外,由于文档都已经存储到内存,所以需要频繁实现修改等操作时,使用...
  • 工程中用的pugixml,读写做的比较复杂,要求存储的属性顺序固定、内存中的xml增删改可回滚、xml文件可以递归链接解析、支持xsd校验、支持xsd约束查询判断… 小工具中就简化了,没必要引入太多复杂代码,所以就用的...
  • QFile提供读写文件的接口,QDir提供对目录结构及其内容的访问,QFileInfo提供与系统无关的文件信息,包括文件系统中的文件名称和位置,访问时间和修改时间,权限或文件所有权。 文件大小 在这个例子中,我们确定...
  • 如果你需要的是一个非持久性的基于内存结构,可以考虑使用QMap&lt;QString, QVariant&gt;代替。 QSettings::Format有两种:  QSettings::NativeFormat在windows平台可以读写windows注册表.  QSetti...
  • 在上一篇文章中,我大致将这个QML中的文件IO类...文件结构如图 在QML中调用这个类了,就见简单的读取了一个JSON数据的一个属性值。 重点看下我的文件IO Cpp文件 QJsonObject DLFileIOSystem::DLReadFile()
  • Qt中提供了QDataStream类用于读写二进制文件,所以可以借助此类实现序列化和反序列化。 2.1、定义数据结构 #ifndef DATA_RECORD_H #define DATA_RECORD_H #include <QObject> #include &l
  • QT中对于XML文件读写两种方式:DOM和SAX,两种方法的具体介绍如下: 1. 用于读取和操作 XML 文件的标准是文档对象模型DOM。 优点:DOM为XML文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一...
  • (1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。 (2)用户创建的文件,可以编号存储于磁盘上。如file0,file1,file2...并以编号...
  • QT实例演示

    千次阅读 2019-10-18 19:14:18
    QT模块包括在界面设计CSS样式、web网站文件的上传和下载、应用程序实例检测、外部动态链接库调用、系统托盘管理、查看网络状态、执行外部进程、进程间通过Windows消息通信、INI和JSON格式文件读写、使用in...
  • Qt 学习之路 2》

    热门讨论 2013-02-16 16:23:44
    基于最新的Qt5.0.1的学习书籍,非常适合QT5的入门学习。 适合了解QT5与QT4区别的新手。 文章结构如下: ...36 二进制文件读写 37 文本文件读写 38 存储容器 39 遍历容器 40 隐式数据共享 41 model/view 架构
  • 数据结构课程设计:站的数据层及界面层实现 采用Qt编写 用动态定义的栈类,能够实现任意文件读写,根据文件构建栈,进行入栈和出栈操作,并保存到文件中,并用Qt Creator实现了用户图形界面操作
  • QT多线程另存Excel

    2020-09-11 17:05:28
    为了不影响界面显示,通常应该把读写等操作放到子线...pro(工程文件)中添加如下代码 QT += axcontainer 其他操作源码如下 tool.h #ifndef TOOL_H #define TOOL_H #include<QVariant> //写入数据的结构 struct W

空空如也

空空如也

1 2 3 4
收藏数 67
精华内容 26
关键字:

qt文件结构读写