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;
                   }
               }
           }
        }
    }

 

posted @ 2024-01-18 17:48  飞说晓事  阅读(308)  评论(0)    收藏  举报