点击上方蓝字可直接关注公众号哦,方便下次阅读~
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添加节点的方式进行添加数据。(如有错误的地方希望大家不吝赐教)
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节点信息的,下面介绍。
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()来获得不同列的内容。
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;
}
双击第一行的效果:
学不可以已-----------have to learn!
每天进步一点点!
欢迎大家关注: