网上关于QT4中文乱的解决方法很多,但我这个问题有点特殊,我尚且未找到解决方法。望前辈们帮忙解决一下。
若中文字符串不是从数据库读取,则可以正常显示。怀疑是否是数据库编码的问题,但我不知道从哪里设置数据库的编码方式。谢谢
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
QTextEdit display;
display.resize(400, 160);
display.show(); //下面进行数据库的设置
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //使用sqlite数据库驱动
db.setDatabaseName("bdc.s3db"); //我们之前建立的数据库
//db.set
bool ok = db.open(); //尝试连接数据库
if (ok)
{ //这里用text已经成功连上数据库
QSqlQuery query; //新建一个查询的实例
display.append("connect....");
if (query.exec("select * from zb_tb")) //尝试列出表的所有记录
{ //本次查询成功
QString name, age;
display.append("===========================================");
while(query.next())
{ //定位结果到下一条记录
name = query.value(0).toString();
age = query.value(1).toString();
QString result = name+ " " + age;
// + " " + age;
//display.append(QObject::tr(age.toAscii().data()));
display.append(result);
}
display.append("===========================================");
}
else
{ //如果查询失败,用下面的方法得到具体数据库返回的原因
QSqlError error = query.lastError();
display.append("From mysql database: " + error.databaseText());
}
}
else
{ //打开数据库失败,显示数据库返回的失败描述
display.append("cannot open database.");
display.append("Reason: " + db.lastError().databaseText());
}
QApplication::connect(&app, SIGNAL(lastWindowClose()), &app, SLOT(quit()));
return app.exec();
}
*****************************************************************************************
注意到 name = query.value(0).toString();
age = query.value(1).toString();
我怀疑问题出在这里。
因为我用
name = "面的方法得到";
age = "法得";
代替上面的两行。结果是可以正常显示中文的。