找回密码
 立即注册
收起左侧

《Qt及Qtquick开发详解》第4章中文乱码

1
回复
7804
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2014-9-10 11:12:20 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 lanbeilyj 于 2014-9-10 11:22 编辑

给位高手或者yafei老师您好!
        我在参考书本的数据库管理系统项目时,遇到中文显示乱码,然后尝试将中文改为英文,依然显示会乱码;关于codecForName("UTF-8"/"GB2312"/"GBK"),codecForLocal(),等等都设置乱码依旧;最诧异的是中文改为英文了,也是乱码;
查看“工具”——”选项“——行为,中使用的编码显示是”UTF-8“,我的环境是:Qt4.8.5+Qtcreator 2.8.0+windows7;
如图:

部分代码如下:
//*********************************connection.h
#include <QtSql>#include <QDebug>static bool createConnection(){    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setHostName("yafeilinux");    db.setDatabaseName("data.db");    db.setUserName("yafei");    db.setPassword("123456");    if (!db.open()) {        //提示出错        return false;    }    QSqlQuery query;
    // 创建分类表    query.exec("create table type(id varchar primary key, name varchar)");    query.exec(QString("insert into type values('0', '请选择类型')"));    query.exec(QString("insert into type values('01', '电视')"));    query.exec(QString("insert into type values('02', '空调')"));
    // 创建品牌表    query.exec("create table brand(id varchar primary key, name varchar, "               "type varchar, price int, sum int, sell int, last int)");    query.exec(QString("insert into brand values('01', '海信', '电视', 3699, 50, 10, 40)"));    query.exec(QString("insert into brand values('02', '创维', '电视', 3499, 20, 5, 15)"));    return true;}
//******************************************main.cpp
#include "widget.h"#include <QApplication>#include <QTextCodec>#include "connection.h"
int main(int argc, char *argv[]){    QApplication a(argc, argv);    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));    //QTextCodec::setCodecForTr(QTextCodec::codecForLocale());    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));       //QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    if(!createConnection())        return 0;
    Widget w;    w.show();        return a.exec();}
//**************************************widget.cpp
#include "widget.h"#include "ui_widget.h"#include <QSqlQueryModel>
Widget::Widget(QWidget *parent) :    QWidget(parent),    ui(new Ui::Widget){    ui->setupUi(this);    setFixedSize(750, 500);    ui->stackedWidget->setCurrentIndex(0);
    QSqlQueryModel *typeModel = new QSqlQueryModel(this);    typeModel->setQuery("select name from type");    ui->sellTypeComboBox->setModel(typeModel);
    QSplitter *splitter = new QSplitter(ui->managePage);    splitter->resize(700, 360);    splitter->move(0, 30);
    splitter->addWidget(ui->toolBox);    splitter->addWidget(ui->dailyList);    splitter->setStretchFactor(0, 1);    splitter->setStretchFactor(1, 1);}
Widget::~Widget(){    delete ui;}
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

我也刚好学到这一章,遇到同样问题。解决如下: 1)用如下两行代码替换原代码: QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); 2)删除项目文件中的data.db 3)重新编译
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-9-10 11:12:21 显示全部楼层
我也刚好学到这一章,遇到同样问题。解决如下:
1)用如下两行代码替换原代码:   
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
2)删除项目文件中的data.db
3)重新编译
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了