简介
QTreeWidget类提供了一个使用预定义树模型的视图,提供了一个标准的树小部件,带有一个经典的基于item的接口。这个类基于Qt的模型/视图体系结构,使用默认模型来保存项目,每个项目都是一个QTreeWidgetItem, 使得将数据的存储与其表示分离开来。
运行效果
模仿qt ui设计属性界面
常用Api
设置表头,为每一列设置标签。
void setHeaderLabels(const QStringList &labels)
单列可用下面的函数
void setHeaderLabel(const QString &label)
隐藏表头
void setHeaderHidden(bool hide)
展开所有项
void expandAll()
小部件内单击时,就会发出这个信号。
void itemClicked(QTreeWidgetItem *item, int column);
当指定项中的列的内容发生更改时,发出此信号。
void itemChanged(QTreeWidgetItem *item, int column);
追加顶级项
void addTopLevelItem(QTreeWidgetItem *item);
附加子项
void addChild(QTreeWidgetItem *child);
设置控件显示在给定项和列指定的单元格中
void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget);
删除给定列和给定项中的控件。
inline void removeItemWidget(QTreeWidgetItem *item, int column);
核心代码
QStringList strList;
strList<<QStringLiteral("属性")<<QStringLiteral("值");
ui->treeWidget->setHeaderLabels(strList);
ui->treeWidget->setAlternatingRowColors(true);
ui->treeWidget->expandAll();
QTreeWidgetItem *item1 = new QTreeWidgetItem(QStringList()<<"QObject");
ui->treeWidget->addTopLevelItem(item1);
QTreeWidgetItem *item11 = new QTreeWidgetItem(QStringList()<<"name"<<"treeWidget");
item1->addChild(item11);
item11->setData(1,Qt::UserRole,QLINEEDIT);
QTreeWidgetItem *item2 = new QTreeWidgetItem(QStringList()<<"QWidget");
ui->treeWidget->addTopLevelItem(item2);
QTreeWidgetItem *item21 = new QTreeWidgetItem(QStringList()<<"enabled");
item2->addChild(item21);
item21->setCheckState(1,Qt::Checked);
QTreeWidgetItem *item22 = new QTreeWidgetItem(QStringList()<<"geomerty");
item2->addChild(item22);
QTreeWidgetItem* item221 = new QTreeWidgetItem(QStringList()<<"X"<<"10");
item22->addChild(item221);
item221->setData(1,Qt::UserRole,QDOUBLESPINBOX);
QTreeWidgetItem *item222 = new QTreeWidgetItem(QStringList()<<"Y"<<"10");
item22->addChild(item222);
item222->setData(1,Qt::UserRole,QDOUBLESPINBOX);
QTreeWidgetItem *item223 = new QTreeWidgetItem(QStringList()<<QStringLiteral("高度")<<"50");
item22->addChild(item223);
item223->setData(1,Qt::UserRole,QDOUBLESPINBOX);
QTreeWidgetItem *item224 = new QTreeWidgetItem(QStringList()<<QStringLiteral("宽度")<<"40");
item22->addChild(item224);
item224->setData(1,Qt::UserRole,QDOUBLESPINBOX);
connect(ui->treeWidget, &QTreeWidget::itemPressed, this, [&](QTreeWidgetItem *item, int column){
if(1 == column)
{
if(item->treeWidget() != NULL)
{
{
if(QDOUBLESPINBOX == item->data(1,Qt::UserRole).toInt())
{
QDoubleSpinBox *spinEditor = new QDoubleSpinBox();
double value = item->text(1).toDouble();
spinEditor->setValue(value);
spinEditor->setDecimals(1);
spinEditor->selectAll();
item->treeWidget()->setItemWidget(item, 1, spinEditor);
}
else if(QLINEEDIT == item->data(1,Qt::UserRole).toInt())
{
QLineEdit *lineEdit = new QLineEdit();
QString text = item->text(1);
lineEdit->setText(text);
lineEdit->selectAll();
ui->treeWidget->setItemWidget(item, 1,lineEdit);
}
}
item->treeWidget()->setFocus();
}
}
else
finshed(item);
});
connect(ui->treeWidget, &QTreeWidget::currentItemChanged, this, [&](QTreeWidgetItem *current, QTreeWidgetItem *previous){
if (current == previous)
return;
finshed(previous);
});
connect(ui->treeWidget, &QTreeWidget::itemChanged , this, [&](QTreeWidgetItem *item){
QString str = QString("%1:%2").arg(item->text(0)).arg(item->text(1));
ui->textEdit->append(str);
});