前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt TreeWidget 控件(一)

Qt TreeWidget 控件(一)

作者头像
用户5908113
发布2019-12-19 14:58:29
1.2K0
发布2019-12-19 14:58:29
举报
文章被收录于专栏:Pou光明

Qt 的List Widget、Tree Widget和Table Widget属于Qt Model/View中的简便类,之前文章介绍过Qt Model/View的三种级别分别是简便类、预定义模型以及自定义模型,其中自定义模型还没有介绍。对于这个简便类,还是有很多地方要介绍的。

顾名思义,说明Tree Widget可以将数据已“树形”的方式向大家显示,这样就涉及到了子节点、父节点等关系,不过本次给大家介绍的是简单的,只有同一层级的数据关系。

接下来以代码的形式向大家介绍:

1. 设置Tree Widget为两列,并设置名称

拖一个控件到Widget上,鼠标左键双击上方矩形框,则会弹出下面的设置界面,点击下方“+”标识,设置列的名称。

这里面要说明的是没找到在Designer里面设置列宽的方法,只能在代码里面设置。

2. 向Tree Widget添加Item

构造了一个QMap数据,通过Map向Tree Widget添加数据。

ui->treeWidget无法直接添加Item,只能通过添加addTopLevelItem,再通过addTopLevelItem添加节点的方式进行添加数据。(如有错误的地方希望大家不吝赐教)

代码语言:javascript
复制
QTreeWidgetItem *objListItem = new QTreeWidgetItem(QStringList()<<QString("Key")<<QString("Value"));
    ui->treeWidget->addTopLevelItem(objListItem);

    QMap<QString,int>::const_iterator it;

    for(it = m_dataMap.begin(); it != m_dataMap.end(); it++)
    {
        QTreeWidgetItem *mItem = new QTreeWidgetItem(
                    QStringList() << it.key() << QString::number(it.value()));

        objListItem->addChild(mItem);
    }

    ui->treeWidget->expandAll();    //TreeWidget全部展开

它长这个样子:

3. 添加双击Item的槽函数

当双击TreeWidget时会发出信号,我们可以使用槽来获取触发的数据。

Item没有currentCount的成员函数,对应的是childCount,槽函数信息汇总直接包含column信息。

自定义函数 getKeyString(item)是用来遍历Item节点信息的,下面介绍。

代码语言:javascript
复制
void Widget::slot_treeWidgetDoubleClicked(QTreeWidgetItem *item, int column)
{
    qDebug() << "item->childCount" << item->childCount()
             << "column" << column;

    QString keyName = getKeyString(item);
    qDebug() << "content is" << keyName;
}

该函数是递归调用,直到父节点为空退出。本次我们的Item只有自己一个,下次和大家分享有多层节点的情况。

通过treeData->text()来获得不同列的内容。

代码语言:javascript
复制
QString Widget::getKeyString(QTreeWidgetItem *treeData)
{
    QString strKey;

    if(treeData->parent() != NULL)
    {
        strKey = strKey.prepend(treeData->text(0));

        qDebug() << "----------" << treeData->text(1);
        getKeyString(treeData->parent());
    }

    return strKey;
}

双击第一行的效果:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pou光明 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档