注意

对于使用QACI驱动访问神通数据库,有一些特别的地方需要注意一下。

字符集

在Windows_64环境下使用VS编译器

因为Qt工程中源码默认使用的编码方式是UTF-8。但是在Windows_64环境下,系统默认使用的字符集是GBK,代码页为936。这样如果在源码中有中文,使用vs编译器的时候会报错:“error C2001:常量中有换行符”。 解决办法:如果该工程不需要跨平台使用(只在win),那么工程设置请使用GBK的编码方式(qt creator的‘编辑’-‘Select Encoding’)。

从char*到QString(含中文)的转换

char * test2 = "我爱中国ing";
QString qtest2 = QString::fromLocal8Bit(test2);
qDebug() << qtest2;

从QString到char*(含中文)的转换

QByteArray temp = qtest2.toLocal8Bit();
char * test2c = temp.data();
printf("%s\n",test2c);

备注:如果直接写char * test2c = qtest2.toLocal8Bit().data(); 可能转换出来的地址被重用,导致后续使用test2c时,字符串被改写

QT内存有效性

QString tmp = "abcd"; tmp.tolocal8bit().data()不建议直接作为参数传递到,因为这样会导致内存地址被重用,处理数据出错,建议定义临时变量,然后执行,比如:

QByteArray ba = Tmp.tolocal8bit();
f1(ba.data(),ba.size());