【QT】树控件

来源:互联网 发布:网上开淘宝店要钱吗 编辑:程序博客网 时间:2024/05/22 11:41

功能截图:

树控件treewidget的最上方有一标题栏,如图共有3列column。下面的每一行由一项item占用,每项item有多列column,每一列表示该项的一个属性。
每个item可以添加子项,如图中的HW是ZZN的子项。
每一项的每一个column中,可显示text,可添加显示icon,可设置多个data。
这里写图片描述

代码实现:

1、设置树控件的列数和宽度:

    ui->m_treeWidget->setColumnCount(3);    ui->m_treeWidget->setColumnWidth(0,100);

2、设置标题:

    QStringList headers;    headers.append("name");    headers.append("gender");    headers.append("height");    ui->m_treeWidget->setHeaderLabels(headers);

3、读入icon:

   QIcon icon_male("C:/Users/Maggie/Downloads/male.png");   QIcon icon_female("C:/Users/Maggie/Downloads/female.png");

4、插入数据:

    QTreeWidgetItem *zzn=AddItem("ZZN",false,174,NULL,icon_female);    AddItem("HW",true,184,zzn,icon_male);

5、AddItem函数:

QTreeWidgetItem *MainWindow::AddItem(const QString &name,const bool gender,const int height,QTreeWidgetItem *parent,QIcon icon){    QTreeWidgetItem * item=new QTreeWidgetItem();    item->setText(0,name);    item->setText(1,QString::number(gender)); //bool类型转换成QString    item->setText(2,QString::number(height)); //int类型转换成QString    item->setIcon(1,icon);    item->setData(1,Qt::UserRole+1,gender);    item->setData(2,Qt::UserRole+2,height);    if(parent) //如果有父结点,则将此item添加给父结点    {        parent->addChild(item);    }    else  //如果没有父结点,则将此item添加给treewidget的最顶层(最后)    {        ui->m_treeWidget->addTopLevelItem(item);    }    return item;}

调试总结:
1、一开始,窗口是并列显示的两条item。设置断点发现“HW”项的第四个参数parent本应传入ZZN但却是空指针。后来发现忘记写AddItem函数的返回值 return item,然而编译器竟然编译通过。
2、由于树控件的每个column像列表控件的每一项那样有自己独立的text icon data,所以很多与item有关的函第一个参数往往都要指明针对哪一列column操作。如:

item->setData(1,Qt::UserRole+1,gender); item->setText(2,QString::number(height)); item->setIcon(1,icon);

3、setText第二个参数text是QString类型:
int转QString:QString::number(size);
bool转QString:QString::number(gender);

原创粉丝点击