zoukankan      html  css  js  c++  java
  • QTreewidget的使用

    1 QtreeWidget显示右键菜单

    #include "treewidget.h"
    
    #include <QPushButton>
    #include <QMenu>
    
    TreeWidget::TreeWidget(QWidget *parent)
      : QMainWindow(parent)
    {
      ui.setupUi(this);
    
      //设置树形控件每一列的名称
      QStringList sl;
      sl << u8"名称";
      ui.treeWidget->setHeaderLabels(sl);
    
      //treewidget鼠标右键菜单事件,需要在代码手动设置ContextMenuPolicy属性或者在ui文件中设置
      ui.treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
      connect(ui.treeWidget, &QWidget::customContextMenuRequested, this,
              &TreeWidget::ShowContextMenu);
    
      //为树形控件添加一级结点
      connect(ui.add_first_node_button, &QPushButton::clicked, this,
              &TreeWidget::AddFirstNode);
    
      //为树形控件添加二级结点
      connect(ui.add_second_node_button, &QPushButton::clicked, this,
              &TreeWidget::AddSecondNode);
    }
    
    void TreeWidget::ShowContextMenu(const QPoint &pos)
    {
      QMenu *menu = new QMenu(this);
      QTreeWidgetItem *item = ui.treeWidget->itemAt(pos);
      if (item)
      {
        if ((int)TreeItemType::kFisrtNode == item->type())
        {
          QAction *action1 = new QAction(u8"一级结点1", this);
          menu->addAction(action1);
          QAction *action2 = new QAction(u8"一级结点2", this);
          menu->addAction(action2);
          QAction *action3 = new QAction(u8"一级结点3", this);
          menu->addAction(action3);
        }
        else if ((int)TreeItemType::kSecondNode == item->type())
        {
          QAction *action1 = new QAction(u8"二级结点1", this);
          menu->addAction(action1);
          QAction *action2 = new QAction(u8"二级结点2", this);
          menu->addAction(action2);
          QAction *action3 = new QAction(u8"二级结点3", this);
          menu->addAction(action3);
        }
      }
      else
      { //在空白处点击,没有选中QTreeWidgetItem
        QAction *action1 = new QAction(u8"空白结点1", this);
        menu->addAction(action1);
        QAction *action2 = new QAction(u8"空白结点2", this);
        menu->addAction(action2);
        QAction *action3 = new QAction(u8"空白结点3", this);
        menu->addAction(action3);
      }
    
      menu->exec(QCursor::pos());
    }

    2 QtreeWidget添加结点

    void TreeWidget::AddFirstNode()
    {
      QTreeWidgetItem *node = new QTreeWidgetItem(ui.treeWidget,
          (int)TreeItemType::kFisrtNode);
      QString text = QString::number(++node_sequence_);
      node->setText(0, text);
      ui.treeWidget->addTopLevelItem(node);
    }
    
    void TreeWidget::AddSecondNode()
    {
      QTreeWidgetItem *it = ui.treeWidget->currentItem();
      if (!it)
      {
        return;
      }
      QTreeWidgetItem *item = new QTreeWidgetItem(it, (int)TreeItemType::kSecondNode);
      item->setText(0,u8"二级结点");
      it->addChild(item);
    }

    3 QtreeWidget删除结点

    void TreeWidget::DeleteNode()
    {
      QTreeWidgetItem *item = ui.treeWidget->currentItem();
      if (!item)
      {
        return;
      }
      if ((int)TreeItemType::kFisrtNode == item->type())
      {
        int index = ui.treeWidget->indexOfTopLevelItem(item);
        ui.treeWidget->takeTopLevelItem(index);
      }
      else if ((int)TreeItemType::kSecondNode == item->type())
      {
        ui.treeWidget->removeItemWidget(item, 0);
        delete item;
      }
    }

     效果如下图:

     代码源码下载(treewidget文件夹):git@github.com:Mr-jiayunfei/qt_code.git

  • 相关阅读:
    从句分析
    artDialog ( v 6.0.2 ) content 参数引入页面 html 内容
    Java实现 LeetCode 13 罗马数字转整数
    Java实现 LeetCode 13 罗马数字转整数
    Java实现 LeetCode 13 罗马数字转整数
    Java实现 LeetCode 12 整数转罗马数字
    Java实现 LeetCode 12 整数转罗马数字
    Java实现 LeetCode 12 整数转罗马数字
    Java实现 LeetCode 11 盛最多水的容器
    Java实现 LeetCode 11 盛最多水的容器
  • 原文地址:https://www.cnblogs.com/LuckCoder/p/11008467.html
Copyright © 2011-2022 走看看