• 9745阅读
  • 6回复

[提问]从sqlite中读取中文后在QTableview中显示是乱码(问题已解决) [复制链接]

上一主题 下一主题
离线loopolike
 

只看楼主 倒序阅读 楼主  发表于: 2012-02-22
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
先是打开数据库QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");    //
db.connectOptions();
  
  
db.setDatabaseName("lc");  
  
if (!db.open())  
  
{      
  
QMessageBox::warning(0, QObject::tr("Database Error"),            
                
db.lastError().text());        return false;
  
}
以下是查询和显示的处理
model = new QSqlTableModel(this);  
model->setTable("UserTable");
  
model->setSort(UserTable_UserName, Qt::AscendingOrder);  
  
model->setHeaderData(UserTable_UserName, Qt::Horizontal, tr("姓名"));
  
model->setHeaderData(UserTable_UserUnits, Qt::Horizontal, tr("单位"));  
  
model->setHeaderData(UserTable_PWD, Qt::Horizontal, tr("MPH"));  
  
model->setHeaderData(UserTable_Popedom, Qt::Horizontal, tr("权限"));
  
model->setHeaderData(UserTable_SpecialTopic, Qt::Horizontal, tr("专业代码"));    //
model->
    model->select();    //model->    //
view
= new QTableView;  
ui->usertableView->setModel(model);  
  
ui->usertableView->setSelectionMode(QAbstractItemView::SingleSelection);  
ui->usertableView->setSelectionBehavior(QAbstractItemView::SelectRows);  
  
ui->usertableView->setColumnHidden(UserTable_UserName, true);  
  
ui->usertableView->resizeColumnsToContents();  
ui->usertableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
main.cpp中已经做以下处理QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
中文就是显示不正常不知道怎么回事


离线loopolike

只看该作者 1楼 发表于: 2012-02-22
没有人回答我
离线ajaxhe
只看该作者 2楼 发表于: 2012-02-23
在main函数改成:
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
试试。
若不行,再安装一个SQLite Expert确保你的数据在数据库中是正常的
离线ajaxhe
只看该作者 3楼 发表于: 2012-02-23
在插入数据的时候,不要忘记使用tr
如:
query.exec(QObject::tr("INSERT INTO subLogType (name,logTypeId,contents) VALUES ("
                "'信号量报警',1,'信号量报警')"));
离线loopolike

只看该作者 4楼 发表于: 2012-03-01
回 2楼(ajaxhe) 的帖子
谢谢
离线loopolike

只看该作者 5楼 发表于: 2012-03-01
回 3楼(ajaxhe) 的帖子
谢谢你拉
离线loopolike

只看该作者 6楼 发表于: 2012-03-01
最后我想应该是在中文的编码上,QT和数据库用的不一样,所以最后也将数据库的编码改成uncode,就好了,也就是做到软件和数据库对中文的编码方式都是一样的,main.cpp中已经做处理QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
中文就显示很正常啦
快速回复
限100 字节
 
上一个 下一个