QT学习笔记之QT5 + VS2013/VS2015 中文乱码解决办法以及ListView,TableView,TreeView的基本用法
来源:互联网 发布:淘宝模特米雪儿 编辑:程序博客网 时间:2024/05/14 22:11
写在前面
额呵呵呵呵,我又来装逼了,其实也不是很难的一个问题,但是就是记不起来怎么去解决,我还是记录一下吧!(本宝宝智商实在捉急啊!T_T)
解决办法
就在头文件里面加上这句就可以了!
#pragma execution_character_set("utf-8")
这个定义无论是在微软的VS还是在QCreator里面都可以解决中文乱码的问题。
这张截图是在QCreator里头的截图
TreeView, ListView,TableView
额,如果我说这就结束了,应该会有人打我吧(委屈!T_T)
好了,说下下个问题吧!最近在做一个项目用到了ListView,但是我翻阅了大量的文档(除了官方的文档!T_T),发现好像没有这方面的解决办法啊!好吧,通过百度找到了以下解决办法。
理解的办法,我们先定义一个用于设置List模型的对象,也就是QStandardItemModel的对象,你可以理解为这就是那个ListView了(实际上不是啊,这只是listView的一个模式而已),然后我们要塞入一条一条的数据值对吧!嗯,我们这时候就要定义一系列的QStandardItem的对象来填充那个QStandardItemModel对象,当我们设置完这些数据以后,就可以调用ListView的setModel()方法来把这个Model设置到ListView上面。
好啦,呈上我的代码。这是借鉴了其他人的代码而来的。
//ListView 用法 QStringList list; list.append("a"); list.append("b"); list.append("c"); list.append("d"); list.append("e"); list.append("f"); list.append("g"); list.append("h"); list.append("i"); list.append("j"); list.append("k"); for (int i = 0; i < list.size(); i++) { QString str = static_cast<QString>(list.at(i)); QStandardItem* item_1 = new QStandardItem(str); QStandardItem* item_2 = new QStandardItem(str); if (i % 2 == 0) { //只是用于设置设条数据的显示框的颜色 QLinearGradient linearGrad(QPointF(0, 0), QPointF(200, 200)); linearGrad.setColorAt(0, Qt::darkGreen); linearGrad.setColorAt(1, Qt::yellow); QBrush brush(linearGrad); item_1->setBackground(brush); } this->itemModel_1->appendRow(item_1); this->itemModel_2->appendRow(item_2); } ui.listView_1->setModel(itemModel_1); ui.listView_2->setModel(itemModel_2); this->connect(ui.listView_1, SIGNAL(QListView::clicked(QModelIndex)), this, SLOT(itemChecked(QModelIndex)));}
运行结果如下:
另外不要怀疑c这条数据有问题,谁知道这个ListView的数据是可以双击修改的,然后手贱去双击了一下,居然变成了EditLine,然后就成了这样的。巨坑。
如果你要让这个listView不可双击修改,直接设置他的Enable为true就可以了吧!
好了这次就到这里了,下次在更新tableView和treeView吧!
好了,经过一天的休整,终于完成了tableView和treeView的示例,一一展示吧!
tableView是一个表格形式的,所以必须在使用前设置表头,也就是setHorizontalHeaderItem()这个函数的作用,设置完表头以后就可以设置数据了;设置数据也是比较简单的,只需要在QStandardItemModel的对象里头设置每行每列的数据就可以了,注意显示在表格上的数据得用QStandardItem的对象进行包装!
this->itemModel_2 = new QStandardItemModel(this); //设置表头 itemModel_2->setHorizontalHeaderItem(0, new QStandardItem(tr("字母"))); itemModel_2->setHorizontalHeaderItem(1, new QStandardItem(tr("说明"))); //设置表格属性 具体查看API 这里设置的是选中时整行被选中 ui.tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //设置数据 for (int i = 0; i < list.size(); i++) { QString str = static_cast<QString>(list.at(i)); //设置第i行,第0列的数据 itemModel_2->setItem(i, 0, new QStandardItem(str)); //设置第i行,第1列的数据 itemModel_2->setItem(i, 1, new QStandardItem(tr("三生三世,十里茅坑!"))); } ui.tableView->setModel(itemModel_2);
treeView就是一个属性的结构,就好比我们安装软件时,选择目录时的那种结构,这个结构有些复杂;(我找到的资料不知道是QT几的,我只是分享我在QT5.8编译成功的例子),这个treeView也是可以设置表头的,如果你要设置这个信息,就用setHorizontalHeaderLabels()配合list来一次设置表头,也是比较方便的;接下来就是添加数据了,最外面的一层由QStandardItemModel的对像来添加,下面的子节点就由父节点来进行添加
//treeView 的用法 itemModel_3 = new QStandardItemModel(ui.treeView); itemModel_3->setHorizontalHeaderLabels(QStringList() << tr("字母") << tr("说明")); //添加父级节点 A QStandardItem* item = new QStandardItem("A"); //这里是由QStandardItemModel的对象来进行添加 itemModel_3->appendRow(item); //在A的下面添加一个子节点 a QStandardItem* item1 = new QStandardItem("a"); //上面我们只是把第一列的树形结构生成完毕了,第二列的数据还是空白的 //这里节点的添加就由A这个节点进行,千万别用model进行添加,否则就又添加了一个父级节点而不是A的子节点 item->appendRow(item1); //因为我们的表头有两列,所以还得设置第二列的数据,如果是添加父级节点的数据,那么就用model的setItem()函数,如果是添加子节点的数据,那么就用那个父节点来setChild()设置这个数据。这里一定要注意序号,子节点一定是从0行开始的,然后后面就是你要设置数据的列数,最后就是数据 itemModel_3->setItem(0, 1, new QStandardItem("三生三世,十里菊花")); item->setChild(0, 1, new QStandardItem("你想搞事情啊!")); ui.treeView->setModel(itemModel_3);
总结
这些控件都是利用QStandardItemModel和QStandardItem来进行数据的设置,QStandardItemModel负责设置外观,而QStandardItem则负责设置每一条的数据,而我们用设计工具拖的控件,我们可以理解为一个容器,用来显示以及填装数据用的。
源码在这里,需要一个积分哦!意思意思下。http://download.csdn.net/detail/pkgk2013/9764351
- QT学习笔记之QT5 + VS2013/VS2015 中文乱码解决办法以及ListView,TableView,TreeView的基本用法
- QT5.8 + VS2015 中文乱码解决办法
- Qt5.3 for vs2013 中文乱码解决办法
- Qt5 VS2013中文乱码解决
- 【Qt】]Qt5中文乱码
- 解决Qt5和VS2015中文乱码的问题
- 在vs2015中使用qt5出现中文乱码的问题
- 初学Qt之--Qt程序中文乱码的暂时解决办法
- Qt5.2和VS2013中文乱码的问题
- Qt5.8 + VS2015 使用QMessageBox中文乱码
- Qt中文|qt5解决读取中文文件中文的乱码
- Android学习笔记----ListView的基本用法
- VS2013 QT5.3.2中文显示乱码问题
- VS2013+QT5.3 中文乱码问题 解决方案
- VS2013+QT5.3 中文乱码问题 解决方案
- 解决VS2013+QT5中文乱码问题
- QT5.8 VS2013显示中文乱码
- Qt5.5.1中文乱码解决办法
- POJ 1850 Code/POJ 1496 Word Index(组合数学-字母串序号)
- sql 判断临时表的是否存在
- 用汉字命名图片
- php 将驼峰变量和下划线风格的变量名互转
- 最全前端资源汇集
- QT学习笔记之QT5 + VS2013/VS2015 中文乱码解决办法以及ListView,TableView,TreeView的基本用法
- 快排
- 知识总结一
- CocoaPods详解之----进阶篇
- linux之ip route命令
- JVM进阶之路一
- Android 开发MVP模式
- 金融时间序列分析:11. 模型分析小结
- Spring不能通过注解向Servlet中注入实例的原理和解决办法