-
如何为treewidgetitem添加右键菜单
2017-09-12 23:27:33这两天写了个基于sqlite的学生管理系统,同时也复习了qt的一些知识,也...一、 如何为treewidgetitem添加右键菜单 第一步: // 设置右键编辑 ui.TREEwidget->setContextMenuPolicy(Qt::CustomContextMenu);这两天写了个基于sqlite的学生管理系统,同时也复习了qt的一些知识,也加深了自己队sqlite用法的理解。
在此,总结下自己在写的时候复习到的知识。
一、 如何为treewidgetitem添加右键菜单
第一步:
// 设置右键编辑
ui.TREEwidget->setContextMenuPolicy(Qt::CustomContextMenu);
第二步 :
Connect 相关的信号和槽;
connect(ui.TREEwidget, SIGNAL(customContextMenuRequested(const QPoint&)),this,
SLOT(OnlistContextMenu(const QPoint&)));
第三步 设置右键菜单项;
int demo003::OnlistContextMenu(const QPoint&pos)
{
QMenu menu;
menu.addAction(ui.action_upload);
menu.addAction(ui.action_delete);
QPoint pt_global =ui.TREEwidget->mapToGlobal(pos);
menu.exec(pt_global);
return0;
}
当然 这一切的前提是,你已经在qtdesigner里面添加好了相关的action,
并且每个action都有相关的槽函数;
-
TreeWidget添加checkbox后的选中事件
2020-01-13 15:04:58首先connect一下到槽函数: ...treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int))); treeItemChanged函数如下: void KqDlgXzpjzbTree::treeItemChanged(...首先connect一下到槽函数:
connect(ui->treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int)));
treeItemChanged函数如下:
void KqDlgXzpjzbTree::treeItemChanged(QTreeWidgetItem *item, int column) { QString itemText = item->text(0); if (item->checkState(0) == Qt::Checked) { QTreeWidgetItem *parent = item->parent(); int cnt = item->childCount(); if (cnt >0) { for (int i = 0;i < cnt;i++) { item->child(i)->setCheckState(0,Qt::Checked); } } else { updateParentItem(item); } } else if (item->checkState(0) == Qt::Unchecked) { int cnt = item->childCount(); if (cnt > 0) { for (int i = 0;i < cnt;i++) { item->child(i)->setCheckState(0,Qt::Unchecked); } } else { updateParentItem(item); } } }
updateParentItem(item);函数如下:
void KqDlgXzpjzbTree::updateParentItem(QTreeWidgetItem *item) { QTreeWidgetItem *parent = item->parent(); if(parent == NULL) { return; } //选中的子节点个数 int selectedCount = 0; int childCount = parent->childCount(); for (int i = 0; i < childCount; i++) { QTreeWidgetItem *childItem = parent->child(i); if (childItem->checkState(0) == Qt::Checked) { selectedCount++; } } if (selectedCount <= 0) { //未选中状态 parent->setCheckState(0, Qt::Unchecked); } else if (selectedCount > 0 && selectedCount < childCount) { //部分选中状态 parent->setCheckState(0, Qt::PartiallyChecked); } else if (selectedCount == childCount) { //选中状态 parent->setCheckState(0, Qt::Checked); } }
最美的不是下雨天,是曾与你躲过雨的屋檐。《不能说的秘密》 -
QT中treeWidgetItem使用
2020-02-10 21:36:12{ ui->setupUi(this);...treeWidget->setHeaderLabels(QStringList()<<"英雄姓名"<<"英雄介绍"); //添加头项 QStringList l,m,f; //相当于C++中 list<string> l l<<"力量"...{ ui->setupUi(this); ui->treeWidget->setHeaderLabels(QStringList()<<"英雄姓名"<<"英雄介绍"); //添加头项 QStringList l,m,f; //相当于C++中 list<string> l l<<"力量"; m<<"敏捷"; f<<"防御"; QTreeWidgetItem *LL= new QTreeWidgetItem(l); //创建树项 QTreeWidgetItem *MM= new QTreeWidgetItem(m); QTreeWidgetItem *FF= new QTreeWidgetItem(f); ui->treeWidget->addTopLevelItem(LL);//添加 ui->treeWidget->addTopLevelItem(MM); ui->treeWidget->addTopLevelItem(FF); QStringList ll,mm,ff; ll<<"力量狗"; mm<<"敏捷狗"; ff<<"防御狗"; QTreeWidgetItem *LLL= new QTreeWidgetItem(ll); QTreeWidgetItem *MMM= new QTreeWidgetItem(mm); QTreeWidgetItem *FFF= new QTreeWidgetItem(ff); LL->addChild(LLL);//添加子项 MM->addChild(MMM); FF->addChild(FFF); }
-
Qt TreeWidget的增删改
2016-06-02 16:58:15在窗体上放一个TreeWidget控件和四个PushButton加一个Horizontal Spacer 布局如图 给树添加元素节点的方法和实现 .h文件 QTreeWidgetItem * AddTreeRoot(QString name,QString desc); QTreeWidgetItem * ...在窗体上放一个TreeWidget控件和四个PushButton加一个Horizontal Spacer
布局如图
给树添加元素节点的方法和实现
.h文件
QTreeWidgetItem * AddTreeRoot(QString name,QString desc); QTreeWidgetItem * AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc);
.cpp文件
在构造方法里添加元素设置树的列数和标题的名称QTreeWidgetItem * TreeViewView::AddTreeRoot(QString name,QString desc) { QTreeWidgetItem * item=new QTreeWidgetItem(QStringList()<<name<<desc); ui->tv_Source->addTopLevelItem(item); return item; } QTreeWidgetItem * TreeViewView::AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc) { QTreeWidgetItem * item=new QTreeWidgetItem(QStringList()<<name<<desc); parent->addChild(item); return item; }
当然可以设置Header不显示,根据你的需求定ui->tv_Source->setColumnCount(2); ui->tv_Source->setHeaderLabels(QStringList()<<"Name"<<"Description"); //ui->tv_Source->setHeaderHidden(true); QTreeWidgetItem * beiJingItem = AddTreeRoot("bejing","city"); AddTreeNode(beiJingItem,"haidian","HaiDian"); AddTreeNode(beiJingItem,"chaoYang","chaoYang"); AddTreeNode(beiJingItem,"fengTai","fengTai"); QTreeWidgetItem * HeiBeiItem =AddTreeRoot("hebei","city"); AddTreeNode(HeiBeiItem,"baoDing","baoDing"); AddTreeNode(HeiBeiItem,"shiJiaZhuang","shiJiaZhuang");
添加事件相对来说比较简单
直接调用我的前边写的方法,因为TreeWidget一直是选中状态就加了一个添加根节点的槽
修改方法也很简单void TreeViewView::on_btn_Add_clicked() { QTreeWidgetItem * item= ui->tv_Source->currentItem(); if(item!=Q_NULLPTR) { AddTreeNode(item,"new","new"); } else { AddTreeRoot("new","new"); } } void TreeViewView::on_btn_AddRoot_clicked() { AddTreeRoot("new","new"); }
void TreeViewView::on_btn_Modify_clicked() { QTreeWidgetItem * currentItem = ui->tv_Source->currentItem(); if(currentItem==Q_NULLPTR) { return; } for(int i=0;i<currentItem->columnCount();i++) { currentItem->setText(i,tr("Modify")+QString::number(i)); } }
删除槽就要考虑的多一点
要看它有没有父节点void TreeViewView::on_btn_Del_clicked() { QTreeWidgetItem * currentItem = ui->tv_Source->currentItem(); if(currentItem==Q_NULLPTR) { return; } //如果没有父节点就直接删除 if(currentItem->parent()==Q_NULLPTR) { delete ui->tv_Source->takeTopLevelItem(ui->tv_Source->currentIndex().row()); } else { //如果有父节点就要用父节点的takeChild删除节点 delete currentItem->parent()->takeChild(ui->tv_Source->currentIndex().row()); } }
看一下效果
.h文件
.cpp文件#ifndef TREEVIEWVIEW_H #define TREEVIEWVIEW_H #include <QDialog> #include<QString> #include<QTreeWidgetItem> namespace Ui { class TreeViewView; } class TreeViewView : public QDialog { Q_OBJECT public: explicit TreeViewView(QWidget *parent = 0); ~TreeViewView(); private slots: void on_tv_Source_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btn_Add_clicked(); void on_btn_AddRoot_clicked(); void on_btn_Del_clicked(); void on_btn_Modify_clicked(); private: Ui::TreeViewView *ui; QTreeWidgetItem * AddTreeRoot(QString name,QString desc); QTreeWidgetItem * AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc); }; #endif // TREEVIEWVIEW_H
#include "treeviewview.h" #include "ui_treeviewview.h" #include <QStringList> TreeViewView::TreeViewView(QWidget *parent) : QDialog(parent), ui(new Ui::TreeViewView) { ui->setupUi(this); ui->tv_Source->setColumnCount(2); ui->tv_Source->setHeaderLabels(QStringList()<<"Name"<<"Description"); //ui->tv_Source->setHeaderHidden(true); QTreeWidgetItem * beiJingItem = AddTreeRoot("bejing","city"); AddTreeNode(beiJingItem,"haidian","HaiDian"); AddTreeNode(beiJingItem,"chaoYang","chaoYang"); AddTreeNode(beiJingItem,"fengTai","fengTai"); QTreeWidgetItem * HeiBeiItem =AddTreeRoot("hebei","city"); AddTreeNode(HeiBeiItem,"baoDing","baoDing"); AddTreeNode(HeiBeiItem,"shiJiaZhuang","shiJiaZhuang"); } TreeViewView::~TreeViewView() { delete ui; } QTreeWidgetItem * TreeViewView::AddTreeRoot(QString name,QString desc) { QTreeWidgetItem * item=new QTreeWidgetItem(QStringList()<<name<<desc); ui->tv_Source->addTopLevelItem(item); return item; } QTreeWidgetItem * TreeViewView::AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc) { QTreeWidgetItem * item=new QTreeWidgetItem(QStringList()<<name<<desc); parent->addChild(item); return item; } void TreeViewView::on_tv_Source_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) { if(current==Q_NULLPTR)return; if(previous!=Q_NULLPTR) { previous->setBackground(0,Qt::transparent); previous->setBackground(1,Qt::transparent); previous->setTextColor(0,Qt::black); previous->setTextColor(1,Qt::black); } current->setTextColor(0,Qt::blue); current->setTextColor(1,Qt::blue); current->setBackground(0,Qt::red); current->setBackground(1,Qt::red); } void TreeViewView::on_btn_Add_clicked() { QTreeWidgetItem * item= ui->tv_Source->currentItem(); if(item!=Q_NULLPTR) { AddTreeNode(item,"new","new"); } else { AddTreeRoot("new","new"); } } void TreeViewView::on_btn_AddRoot_clicked() { AddTreeRoot("new","new"); } void TreeViewView::on_btn_Del_clicked() { QTreeWidgetItem * currentItem = ui->tv_Source->currentItem(); if(currentItem==Q_NULLPTR) { return; } //如果没有父节点就直接删除 if(currentItem->parent()==Q_NULLPTR) { delete ui->tv_Source->takeTopLevelItem(ui->tv_Source->currentIndex().row()); } else { //如果有父节点就要用父节点的takeChild删除节点 delete currentItem->parent()->takeChild(ui->tv_Source->currentIndex().row()); } } void TreeViewView::on_btn_Modify_clicked() { QTreeWidgetItem * currentItem = ui->tv_Source->currentItem(); if(currentItem==Q_NULLPTR) { return; } for(int i=0;i<currentItem->columnCount();i++) { currentItem->setText(i,tr("Modify")+QString::number(i)); } }
-
Qt中的treeWidget使用
2014-04-22 14:23:48QT GUI中有treeWidget部件,将该控件在Gui中布局好,假设其对象名为treeWidget。...树形结构通过QTreeWidget类和QTreeWidgetItem类实现,QTreeWidgetItem类实现结点的添加。上图代码实现如下: -
Qt 学习笔记 TreeWidget 增删改
2016-10-07 00:53:49在窗体上放一个TreeWidget控件和四个PushButton加一个Horizontal Spacer 布局如图 给树添加元素节点的方法和实现 .h文件 QTreeWidgetItem * AddTreeRoot(QString name,QString desc); QTreeWidgetItem * ... -
QT的ListWidget与TreeWidget控件
2021-01-09 23:13:24从uiuiui界面拉一个出来,往里面添加选项 QListWidgetItem* item1 = new QListWidgetItem("锄禾日当午"); ui->listWidget->addItem(item1);//放QListWidgetItem也行 ui->listWidget->addItem("汗滴禾... -
pyqt5 treewidget图标_PyQt5中QTreeWidget的动态大小
2021-01-17 19:22:31在我通过添加QTreeWidgetItems来创建QTreeWidgetItems,它将TreeWidget作为父级,然后再次创建QTreeWidgetItems,它将上面的QTreeWidgetItem作为父级。在现在,它像左图像一样开始,但是我希望... -
关于pyqt treewidget中underlying C/C++ object has been deleted的错误
2013-08-21 21:24:22在pyqt中使用treewidget,然后想清空此widget,为了简便,使用了clear() 槽,但是后来再次添加item的时候报错:--------------------------------underlying C/C++ object has been deleted----------------------... -
pyqt5 treeWidget入门,多级子项,选中父项,子项也全部选中
2020-07-14 18:59:15目录 1. 成品 2. 树形结构 1. 成品 最近在做项目过程中用到了QTreeWidget,就这里记录下... 树形结构是通过QTreeWidget 和QTreeWidgetItem 类实现的,QTreeWidgetItem 负责添加节点。 1.QTreeWidget类中的常... -
Qt treeWidget树控件之增删改(QPushButton实现 和 鼠标右击菜单实现)
2021-01-20 18:05:52点击的父节点 显示的是在主枝干 点击添加了四个子节点 选中勾选。 注意全勾选的区别。 删除添加子节点2 把添加子节点3–>改成编辑啦 ...QTreeWidgetItem> #include <QContextMenuEven. -
在treewidget中加入控件_Qt5学习笔记(3)——树形控件QtreeWidget
2021-02-05 09:09:03准备给QtreeWidgetItem设置外部图片Icon,以为直接把图片复制到工程根目录下,然后程序里写路径就可以了,结果我错了,没有这么简单。后来请教了别人才知道应该把图片作为Qt资源文件添加进去,然后才可以使用。首先... -
QTreewidgetItem关键字高亮
2015-08-21 11:23:01思路为:给QTreeWidget添加QStyledItemDelegate委托,然后重新paint.代码可以优化,有兴趣的话。#include "treewidget_styledItemDelegate.h" #include #include #include treewidget_styledItemDelegate::... -
QTreeWidget的添加删除、勾选、导入以及拖拽操作示例
2020-12-19 10:52:14目前支持添加、删除、勾选QTreeWidgetItem。同时可以拖拽QTreeWidgetItem用来形成新的层级关系。同时支持从另一个TreeWidget导入到本TreeWidget上面。且维持同样的导入层级关系。 添加实现思路 根据右键选择的... -
C++ Qt5学习笔记 2020-12-11(QTreeWidget使用添加项目,及其他相关操作)
2020-12-11 22:02:04//初始化TreeWidget项目 QTreeWidgetItem *item1=new QTreeWidgetItem; //项目图标 item1->setIcon(0,button_ico_add_friends); //列数 //图标大小 item1->setSizeHint(0,QSize(20,20)); //项目文字 item1->... -
QTreeWidget添加多个节点只能显示一个
2020-06-11 09:46:49QTreeWidget添加了多个子节点,只能显示其中一个子节点,我不知道是不是插入部分有问题 ``` QTreeWidgetItem *Top1Item = new QTreeWidgetItem(); QTreeWidgetItem *Top2Item = new QTreeWidgetItem; ... -
Qtreewidget遍历添加指定目录下所有文件
2014-03-28 10:14:32通过递归遍历添加子项到treewidget中,测试代码已通过,举例为遍历添加/home/XXX下所有文件。解析和详细代码如下: 1.首先在main函数中创建目录根项。 QString rootpath="/home/XXX"; QTreeWidgetItem* ... -
qtreewidget 添加复选按钮
2016-04-11 15:30:43QStringList root; ... QTreeWidgetItem *m_pTreeItem = new QTreeWidgetItem(ui->treeWidget, root); m_pTreeItem->setData(0, Qt::UserRole, 0); //m_pTreeItem->setCheckState(); //m -
PyQt5 树(QTreeWidget)结构或表(QTableWidget)结构添加右键菜单
2019-05-11 15:36:10获得点击的节点 item 实例化一个菜单对象menu,注意给菜单传入父类,决定了菜单归属于哪个组件在哪个组件上显示 为菜单添加多个动作 addAction,返回值为...item = self.treeWidget_2.currentItem() menu = QMenu(se... -
关于QTreeWidget添加多层节点后显示不出来
2012-06-27 16:29:25今天用代码实现了 一棵树,结果再添加到第三层以后,以下的子节点就看不见了。 void QTestTree::add_Parent() { QTreeWidgetItem *A = new QTreeWidgetItem(QStringList() (ui.treeWidget->currentItem... -
Qt中QTreeWidget添加含有checkBox节点父节点和子节点级联关系一些操作
2019-04-28 12:30:10QTreeWidget添加子节点并响应checkBox信号,需要写两个函数,一个是Update(),一个是响应slotCheckClicked...connect(m_ui.treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(slotCheckClicked(Q... -
Qt QTreeWidget 详解
2020-11-23 15:21:31QTreeWidgetItem *topItem1 = new QTreeWidgetItem(ui->treeWidget); topItem1->setText(0,"百度"); ui->treeWidget->addTopLevelItem(topItem1); 2.设置表头隐藏,展开所有项 //隐藏表头 ui->... -
QTreeWidget 用法总结
2017-02-08 22:08:04一、设置列的宽度 、数量 setColumnCount(1); //数量 setColumnWidth(0,100);...QTreeWidgetItem* item = new QTreeWidgetItem(ui.treeWidget); item->setText(0,"nihao"); item->setText(1,"nihao"); -
6. QTreeWidget 树控件
2021-01-06 19:49:50设置头 ...QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<< "力量"); 添加根节点到树控件上 ui->treeWidget->addTopLevelItem(liItem); 添加子节点 liItem->addC.. -
编写Qt界面程序总结
2020-08-03 20:01:41动态创建的如tableWidget中的item,treeWidget中的item等一些随着数据变化而变化的项,在程序中通过代码new;QTimer QDialog 等的创建通过代码new; 3)treeWidget列表项、tableWidget表头列表等一些固定的项名,图标... -
Qt QtreeWidget树形结构图表
2017-10-17 13:22:42本例子采用treewidget类:他继承...三个root节点,每个root节点在添加child节点对应在child节点里添加item(项)。 具体看: QTreeWidgetItem *additem(); void addroot(QTreeWidget *rootwidget,QStringList list)/// -
QTreeWidget 用法整理& 信号与槽设置
2020-07-17 22:32:08除了一级item在定义之时,就确定了是在文件treeWidget里;其他的二级,三级ite等,通过一级item的->addchild()操作来进行继承。 void frmMain::fucInitGbxTreeBar() { ui->treeWidget->setColumnCount(1)...