初始化用基本用到的:
//this->setMouseTracking(true)
this->setRootIsDecorated(false)
this->setSelectionMode(QAbstractItemView::ExtendedSelection)
this->setStyleSheet("QTreeWidget::item{height:25px}") //设置行宽, 我也找不到提供的接口 setStyleSheet很强大建议看
this->setColumnWidth(0, 100) //设置列宽
this->setColumnCount(2)
QStringList lists
lists <<"NO" <<"name"
this->setHeaderLabels(lists)
for (int i=0i<10i++)
{
QStringList contentList
contentList <<QString("00%1").arg(i) <<"boy"
QTreeWidgetItem *pNewItem = new QTreeWidgetItem(this, contentList) //增加
pNewItem->setBackgroundColor(0, QColor(150,0,0))
pNewItem->setFont(0, QFont())
}
//pNewItemRoot->setExpanded(true) //展开子项
增加删除顶层用:
addTopLevelItem(QTreeWidgetItem*)
takeTopLeveltem(int)
topLevelItem(int)//返回
topLevelItemCount()
增加删除子层:
addChild(QTreeWidgetItem*)
addChildren(const QList<QTreeWidgetItem*>&)
takeChild(int)
takeChildren()
child(int) //返回
childCount()
2.进价:
//加checkbox, icon
pNewItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable |Qt::ItemIsEnabled)
pNewItem->setCheckState(0, Qt::Unchecked)
//pNewItem->setIcon(int , QIcon)
//向ITEM里放一些QT的控件,如QSpinBox,QComboBox,QPushButton等
this->setItemWidget(pNewItem, 0, new QSpinBox())
//获取某项的QRect, 有时候会很有用,如显缩略图:
QRect rect = this->visualItemRect(QTreeWidgetItem*)
//右键菜单重写
contextMenuEvent( QContextMenuEvent * event )或者使用信号itemPressed(QTreeWidgetItem*, int)
//对头的 *** 作,可以用QLabel或者QTreeWidgetItem对头进行初始化,
//隐藏头
header()->hide()
m_pHeaderView->setClickable(true) //能够发射sectionClicked(int)信号,可做菜单,显示隐藏列:setSectionHidden(int, bool)isSectionHidden(int)
m_pHeaderView->setMovable(true)
m_pHeaderView->setResizeMode(0, QHeaderView::Fixed) //固定列宽
m_pHeaderView->setDefaultSectionSize(100) //默认
//排序
treeWidget->setSortingEnabled(true)
treeWidget->header()->setSortIndicatorShown(true)
treeWidget->header()->setSortIndicator(0, Qt::AscendingOrder)
//要自定义就用信号
connect( treeWidget->header(), SIGNAL( sectionClicked(int) ), this, SLOT( sectionClickedSlot(int) ) )
在小项目里,使用qtreewidget完全足够,
如果想更多灵活用法请使用QTreeView等 MODEL/VIEW控件
TreeWidget 是 Qt 编程框架提供的一个界面控件,用于显示树形结构。在 TreeWidget 中,当用户点击某个项时,会触发 itemClicked 信号,可以在这个信号的槽函数中进行相应的 *** 作。如果在这个槽函数中重复生成 TreeWidget,可能会导致重复添加 items,从而导致问题。如果您遇到了 TreeWidget 点击后重复生成的问题,可以考虑以下几个方面:
1. 检查槽函数中是否有重复添加 TreeWidget 的 *** 作,如果有的话,可以将其删除或修改。
2. 检查是否有多个相同的 TreeWidget 控件存在于界面上。如果存在多个相同的 TreeWidget,可能会导致消息分发出现问题,导致问题发生。
3. 如果有通过代码设置选中的 item 的 *** 作,可能也会导致问题。可以在 itemClicked 信号中避免重复设置选中的 item。
4. 如果仍然无法解决问题,可以添加一些调试代码(如输出调试信息)来排查问题所在,帮助确定问题发生的原因。
总之,为了避免 TreeWidget 点击后重复生成问题,需要仔细检查代码逻辑,确保不会进行不必要的 *** 作,以及避免存在多余的控件。此外,调试代码也是排查问题的重要手段。
TreeWidget->addTopLevelItem(itemCollect)//树添加一个顶部的节点itemCollect->setExpanded(true)//此节点设为展开
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)