【QT】树控件

功能截图:

树控件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);

猜你喜欢

转载自blog.csdn.net/m0_37557014/article/details/73200833