qt读取ini中文键值配置文件|Qt 关于读写配置文件ini

㈠ Qt的QSettings类读取ini文件,值中有分号时,分号后的值读取不到;如name=cxl;zyx,读取到的内容为cxl

name = "cxl;zyx,"用引号引起来,就可以读了。但如果是两个名字的话,为什么不用下面的句子呢:name1=cxlname2=zyx……

㈡ Qt 关于读写配置文件.ini,该如何解决

我写个了程来序,用到了源配置文件来初始化和保存程序中的文本框的信息。在我的电脑可以实现 但是发到不装Qt的电脑上,程序就只可以读取配置文件的数据 , 但是不能把新信息写入。——解决方案————————————————————–解决方案——————————————————–没qt的电脑,需要你把自己exe依赖的qt库都打包放在一起,这样在没qt环境的电脑上才能正常运行。——解决方案——————————————————–

㈢ 批处理怎么读取INI的配置文件

@EchoOffFor/f"tokens=1-2delims=="%%iin(1.ini)do(If/i"%%i"=="abc"Echo.%%j)Pause

这样可以就可获得abc后面的值了.这只是一种方法.

@EchoOffFor/f"tokens=1-2delims=="%%iin('Type1.ini^|Findstr/r"<abc>"')do(Echo.%%j)Pause

使用findstr命令+简单的表达式也可以获取.

㈣ qt实现打开XX.ini文件,修改其中字段,保存文件。。。

QSettings *config = new QSettings ("C:\Users\Administrator\Desktop\XX.ini",QSettings::IniFormat, 0);config->beginGroup("TERMINF");config->setValue("TID", "1111");delete config;

㈤ 如何用批处理读取ini配置文件

我举个例子好了。有一个文件叫 配置.ini内容为[以下为配置]abc=我是abc的值a=我是a的值批处理就这么写@echo offsetlocal enabledelayedexpansionfor /f "delims=" %%a in ('type "配置.ini"^| find /i "="') do (set %%a)echo %abc%echo %a%pause

㈥ ini、配置文件、读取键值,源代码(C/C++),谢谢

char buffer[256]; GetPrivateProfileString(_T("Section2 Name"), _T("KeyName2"),_T(""), buffer, 256, _T("D:\\murong.ini"));

㈦ windows 7 下 QT 读取ini文件失败 为什么

我也是玩家,放心,这点和CPU没关系,硬盘,显卡,内存也没有关系 (读取配置文件失败:version.ini)-这是个译本未跟上 建议把QQ音速重装一下(看你机子这个用时一定不长的) 或到“删除/添加程序”将其修复 QQ音速还蛮好玩的,注意眼睛!

㈧ 在QT中如何读写数组到INI文件

用Qt的话还是用QFile读取文件吧,功能比较强大,配套的QString或者IOStream的功能同样强大,处理起来会很方便 问题是你描述的太简单了,就是去Qt assistant看看QFile怎么用就可以了

㈨ 如何在Qt中使用自定义数据类型

使用下面这个struct来做说明(这里不管是struct还是class都一样):

struct Player

{

int number;

QString firstName;

QString lastName;

};

QVariant 为了能在QVariant中使用自定义数据类型做,需要使用Q_DECLARE_METATYPE()来向Qt的元系统声明这个自定义类型。如下列所示:

struct Player

{

};

Q_DECLARE_METATYPE(Player);

在作为QVariant传递自定义数据类型时,需要使用QVariant::fromValue()或者qVariantFromValue:

Player player;

object->setProperty("property", QVariant::fromValue(player));

为了更方便一点,你可以在自定义类型中定义一个QVariant() 类型转换符:

struct Player

{

operator QVariant() const

{

return QVariant::fromValue(*this);

}

};

这样我们便可以像下面这样使用了:

Player player;

object->setProperty("property", player);

信号和槽 对于直接连接类型(默认情况下就是直接连接)而言,使用自定义数据类型做信号参数不需要做其他其他处理,就像内置数据类型一样:

connect(sender, SIGNAL(playerCreated(const Player&)), receiver, SLOT(addPlayer(const Player&)));

但在跨线程时如果你还这么做,编译器就会给出警告了:

QObject::connect: Cannot queue arguments of type 'Player'

(Make sure 'Player' is registered using qRegisterMetaType().)

这时我们需要先注册Player:

qRegisterMetaType<Player>("Player");

qRegisterMetaType<Player>( ); (上面那个是错误的,除非名字刚好和类名一样)

connect(sender, SIGNAL(playerCreated(const Player&)), receiver, SLOT(addPlayer(const Player&)));

QDebug 最好是能这样:

qDebug() << player;

而不是这样:

qDebug() << "Player(" << player.number << "," << player.firstName << "," << player.lastName << ")";

怎么做呢?我们需要对QDebug<<操作符重载一下:

inline QDebug operator<<(QDebug debug, const Player& player)

{

debug.nospace() << "Player("

<< player.number << ","

<< player.firstName << ","

<< player.lastName << ")";

return debug.space();

}

QDataStream 跟上面的QDebug很像,我们也需要重载一下<<操作符:

inline QDataStream& operator<<(QDataStream& out, const Player& player)

{

out << player.number;

out << player.firstName;

out << player.lastName;

return out;

}

inline QDataStream& operator>>(QDataStream& in, Player& player)

{

in >> player.number;

in >> player.firstName;

in >> player.lastName;

return in;

}

QSettings

QSettings 用QVariant保存键值,用QDataStream序列化自定义数据。(参考后面的variantToString函数) 为了能在QSettings中使用自定义数据类型,需要让Qt的元系统知道有此类型,就像上面介绍QVariant部分一样,另外还要提供相应的QDataStream操作符,还必须注册这个流操作符:

<Player>("Player");

如此处理之后我们就可以像下面这样使用了:

QSettings settings;

Player player;

settings.setValue("key", player);

QSettings settings;

Player player = value("key").value<Player>();

参考:

QString QSettingsPrivate::variantToString(const QVariant &v) {QString result;

switch (v.type()) {case QVariant::Invalid:result = QLatin1String("@Invalid()");break;

case QVariant::ByteArray: {QByteArray a = v.toByteArray();result = QLatin1String("@ByteArray(");result += QString::fromLatin1(a.constData(), a.size());result += QLatin1Char(')');break;}

case QVariant::String:case QVariant::LongLong:case QVariant::ULongLong:case QVariant::Int:case QVariant::UInt:case QVariant::Bool:case QVariant::Double:case QVariant::KeySequence: {result = v.toString();if (result.startsWith(QLatin1Char('@')))result.prepend(QLatin1Char('@'));break;} #ifndef QT_NO_GEOM_VARIANTcase QVariant::Rect: {QRect r = qvariant_cast<QRect>(v);result += QLatin1String("@Rect(");result += QString::number(r.x());result += QLatin1Char(' ');result += QString::number(r.y());result += QLatin1Char(' ');result += QString::number(r.width());result += QLatin1Char(' ');result += QString::number(r.height());result += QLatin1Char(')');break;}case QVariant::Size: {QSize s = qvariant_cast<QSize>(v);result += QLatin1String("@Size(");result += QString::number(s.width());result += QLatin1Char(' ');result += QString::number(s.height());result += QLatin1Char(')');break;}case QVariant::Point: {QPoint p = qvariant_cast<QPoint>(v);result += QLatin1String("@Point(");result += QString::number(p.x());result += QLatin1Char(' ');result += QString::number(p.y());result += QLatin1Char(')');break;} #endif // !QT_NO_GEOM_VARIANT

default: { #ifndef QT_NO_DATASTREAMQByteArray a;{QDataStream s(&a, QIODevice::WriteOnly);s.setVersion(QDataStream::Qt_4_0);s << v;}

result = QLatin1String("@Variant(");result += QString::fromLatin1(a.constData(), a.size());result += QLatin1Char(')'); #elseQ_ASSERT(!"QSettings: Cannot save custom types without QDataStream support"); #endifbreak;}}

return result; }

qsetting为了让保存的ini文件能和ascii兼容,所以

我们将ini文件中的键值读入到 QVariant 中,需要两个步骤:

因为文件内的一些字符被转义了,比如 "x1234 "等,所以需要 unescape

从 unescape 后的字符串构造出 QVariant

当将QVariant写入文件时:

将 QVariant 转换成字符串

处理字符串中的特殊字符,即 escape


赞 (0)