QT学习笔记之QT5 + VS2013/VS2015 中文乱码解决办法以及ListView,TableView,TreeView的基本用法...

写在前面

额呵呵呵呵,我又来装逼了,其实也不是很难的一个问题,但是就是记不起来怎么去解决,我还是记录一下吧!(本宝宝智商实在捉急啊!T_T)

解决办法

就在头文件里面加上这句就可以了!

#pragma execution_character_set("utf-8")

这个定义无论是在微软的VS还是在QCreator里面都可以解决中文乱码的问题。
这张截图是在QCreator里头的截图
QT学习笔记之QT5 + VS2013/VS2015 中文乱码解决办法以及ListView,TableView,TreeView的基本用法..._第1张图片

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(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)));
}

运行结果如下:

QT学习笔记之QT5 + VS2013/VS2015 中文乱码解决办法以及ListView,TableView,TreeView的基本用法..._第2张图片

另外不要怀疑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(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);

QT学习笔记之QT5 + VS2013/VS2015 中文乱码解决办法以及ListView,TableView,TreeView的基本用法..._第3张图片

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);

QT学习笔记之QT5 + VS2013/VS2015 中文乱码解决办法以及ListView,TableView,TreeView的基本用法..._第4张图片

总结

这些控件都是利用QStandardItemModel和QStandardItem来进行数据的设置,QStandardItemModel负责设置外观,而QStandardItem则负责设置每一条的数据,而我们用设计工具拖的控件,我们可以理解为一个容器,用来显示以及填装数据用的。

源码在这里,需要一个积分哦!意思意思下。http://download.csdn.net/detail/pkgk2013/9764351

转载于:https://www.cnblogs.com/WIT-Evan/p/7289755.html

你可能感兴趣的:(QT学习笔记之QT5 + VS2013/VS2015 中文乱码解决办法以及ListView,TableView,TreeView的基本用法...)