QTreeWidget
一、双击编辑
1、定义连接
方法一:
connect(m_treeWidget, &QTreeView::doubleClicked, this, &FileViewPanelCreator::onItemDoubleClicked);
connect(m_treeWidget->itemDelegate(), &QAbstractItemDelegate::closeEditor, this, &FileViewPanelCreator::onCloseEditor);
方法二:
connect(m_treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(onItemDoubleClicked(QTreeWidgetItem*, int)));
connect(m_treeWidget->itemDelegate(), &QAbstractItemDelegate::closeEditor, this, &FileViewPanelCreator::onCloseEditor);
2、实现函数
方法一:
// 槽函数,处理双击事件
void FileViewPanelCreator::onItemDoubleClicked(const QModelIndex &index) {
if (index.isValid()) {
QTreeWidgetItem* root = m_treeWidget->topLevelItem(0);
QTreeWidgetItem* item = root->child(index.row());
m_treeWidget->openPersistentEditor(item);
}
}
// 槽函数,处理编辑完成事件
void FileViewPanelCreator::onCloseEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint) {
Q_UNUSED(hint);
// 在此处理编辑完成后的操作
QModelIndex editedIndex = m_treeWidget->currentIndex();
QTreeWidgetItem* root = m_treeWidget->topLevelItem(0);
QTreeWidgetItem* item = root->child(editedIndex.row());
m_treeWidget->closePersistentEditor(item);
}
方法二:
// 槽函数,处理双击事件
void FileViewPanelCreator::onItemDoubleClicked(QTreeWidgetItem *item, int row)
{
m_treeWidget->openPersistentEditor(item);
}
// 槽函数,处理编辑完成事件
void FileViewPanelCreator::onCloseEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint) {
Q_UNUSED(hint);
// 在此处理编辑完成后的操作
QTreeWidgetItem* item = m_treeWidget->currentItem();
m_treeWidget->closePersistentEditor(item);
}
二、鼠标右键菜单
1、定义连接
m_treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);//必须添加
connect(m_treeWidget, &QTreeWidget::customContextMenuRequested, this, &FileViewPanelCreator::onTreeWidgetCustomContextMenuRequested);
2、实现函数
void FileViewPanelCreator::onTreeWidgetCustomContextMenuRequested(const QPoint &pos)
{
QTreeWidgetItem* curItem = m_treeWidget->itemAt(pos);
if(curItem != nullptr)
{
QMenu *popMenu = new QMenu(m_treeWidget);
QAction *actionNew = new QAction("Attribute",m_treeWidget);
connect(actionNew, &QAction::triggered, this, &FileViewPanelCreator::ActionNew_Attribute);
popMenu->addAction(actionNew);
popMenu->exec(QCursor::pos());
delete popMenu;
delete actionNew;
}
}
三、逐级查询
////////////////////////////////////////////////////////////////////
//----terminal
// |----device
// |----flow
////////////////////////////////////////////////////////////////////
QString terminal = "terminal";
QString device = "device";
QString flow = "flow";
QList<QTreeWidgetItem*> terminallist = m_treeWidget->findItems(terminal, Qt::MatchExactly|Qt::MatchRecursive, 0);//精确查询
foreach(QTreeWidgetItem* terminalitem, terminallist) //查找Terminal
{
if(terminalitem->text(0) == terminal)
{
int size = terminalitem->childCount();
for(int i = 0; i < size; i++)//查找device
{
QTreeWidgetItem* deviceitem = terminalitem->child(i);
if(deviceitem->text(0) == device)
{
int count = deviceitem->childCount();
for(int j = 0; j < count; j++)//查找flow
{
QTreeWidgetItem* flowitem = deviceitem->child(j);
if(flowitem->text(0) == flow) return;
}
}
}
}
}

浙公网安备 33010602011771号