QT treewidget 右键菜单
VS2012+QT5.2 ,没有ui,纯代码实现右键
方法一:常规但略麻烦
1、头文件slot中声明
QTreeWidget *tree;
void showrightMenu(QPoint);//显示树目录右键菜单
2、源文件中
tree = new QTreeWidget;
tree->setHeaderHidden(true);//隐藏树的标题栏
tree->setContextMenuPolicy(Qt::CustomContextMenu);//右键 不可少否则右键无反应
connect(tree,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showrightMenu(QPoint)));
并实现槽函数
void classname::showrightMenu(QPoint point)
{
popMenu->clear();//清除原有菜单
popMenu->addAction(expandallAction);//如果放这是全局都有的右键
popMenu->addAction(foldedallAction);
//QTreeWidgetItem *item = tree->itemAt(point); //可得到右键条目
popMenu->exec(QCursor::pos());
}
其中expandallAction、foldedallAction及其方法的实现都是和菜单的一样如下:
声明:
QAction *expandallAction;
QAction *expandoneAction;
void expandalltreeItem();//右键展开所有树的条目
void foldedalltreeItem();//右键折叠所有树的条目
实现:
popMenu = new QMenu(this);
expandallAction = new QAction(QStringLiteral("展开全部"),this);
expandallAction->setStatusTip(QStringLiteral("展开全部"));
foldedallAction = new QAction(QStringLiteral("折叠全部"),this);
foldedallAction->setStatusTip(QStringLiteral("折叠全部"));
connect(expandallAction,SIGNAL(triggered()),this,SLOT(expandalltreeItem()));
connect(foldedallAction,SIGNAL(triggered()),this,SLOT(foldedalltreeItem()));
void classname::expandalltreeItem()
{
tree->expandAll();
}
void classname::foldedalltreeItem()
{
tree->collapseAll();
}
方法二 简单有效
声明void contextMenuEvent ( QContextMenuEvent * event ); //右键坐标定位
实现:
void classname::contextMenuEvent(QContextMenuEvent * event )
{
popMenu->clear();//清除原有菜单
popMenu->addAction(expandallAction);//如果放这是全局都有的右键
popMenu->addAction(foldedallAction);
QPoint point = event->pos();//得到鼠标的位置全局坐标
QTreeWidgetItem *item = tree->itemAt(point);
popMenu->exec(QCursor::pos());//菜单出现的位置为当前鼠标的位置
event->accept();
}
其中expandallAction、foldedallAction及其方法的实现如上
区别:方法一的右键有效区为tree,也就是目录区,方法二右键的有效区为全部屏幕
QT treewidget 右键菜单的更多相关文章
- (四)Qt之右键菜单
1.右键菜单创建和显示 作为一种交互性强.使用方便的右键菜单在程序中是非常常用的,在Qt中可以轻松的实现. QMenu menu; //添加菜单项,指定图标.名称.响应函数 menu.addActio ...
- Qt添加右键菜单
QAction *hideAction = new QAction(tr(" 隐藏"),this); addAction(hideAction); setContextMenuPo ...
- QML添加右键菜单
MouseArea { id: mouseRegion anchors.fill: parent; acceptedButtons: Qt.LeftButton | Qt.RightButton // ...
- Qt——右键菜单
所谓“右键菜单”,我们可以这样来看:右键+菜单.所以我们可以定义一个菜单,然后重写鼠标点击事件,令菜单在鼠标右击的时候弹出来.这种方法是可以的,但是Qt提供了一种专门用于右键菜单的方法,且看下面这个属 ...
- Qt之QAbstractItemView右键菜单
一.功能概述 说起右键菜单,之前Qt之自定义QLineEdit右键菜单这篇文章中我已经讲述过3种右键菜单的实现方式,今儿也是在啰嗦一下,针对QListWidget类在定制一下右键菜单,我使用的具体方式 ...
- Qt之自定义QLineEdit右键菜单
一.QLineEdit说明 QLineEdit是单行文本框,不同于QTextEdit,他只能显示一行文本,通常可以用作用户名.密码和搜索框等.它还提供了一些列的信号和槽,方便我们使用,有兴趣的小伙伴可 ...
- Qt之密码框不可选中、复制、粘贴、无右键菜单等
简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...
- Qt之国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)
简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...
- 【Qt】Qt之密码框不可选中、复制、粘贴、无右键菜单等【转】
简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...
随机推荐
- Get请求-Test版
package com.fanqi.test; import java.io.DataInputStream; import java.io.IOException; import java.io.I ...
- java反射——方法
大家都知道反射技术在Java里面时非常重要的一个技术点,因为Java好多框架的编写都是基于反射的,别的不多说,spring框架里面的IOC就是基于反射实现.那么什么是反射呢?JAVA反射机制是在运行状 ...
- 简单工厂模式设计(java反射机制改进)
如果做开发的工作,工厂设计模式大概都已经深入人心了,比较常见的例子就是在代码中实现数据库操作类,考虑到后期可能会有数据库类型变换或者迁移,一般都会对一个数据库的操作类抽象出来一个接口,然后用工厂去获取 ...
- git 学习(一)初始化和提交
git 学习(一) 创建git版本库 $ mkdir gitstudy $ cd gitstudy $ git init nitialized empty Git repository in /Use ...
- mysql 中用户默认密码加密问题
问题描述: 在mysql中 user表中新增用户默认密码为123456,但是在数据库中显示不能为明文,而mysql的默认字段不能用函数 解决方法: 用触发器 delimiter | drop trig ...
- Java基础语法 - 面向对象 - 类的主方法main方法
主方法是类的入口点,它指定了程序从何处开始,提供对程序流向的控制.Java编译器通过主方法来执行程序. 主方法的语法如下: /* a.主方法是静态的,如果要直接在主方法中调用其它方法,则该方法必须也是 ...
- mysql 中sum (if()) 用法
原表: id fenlei time 1 分类1 20130316 2 分类2 20130316 3 分类3 20130317 ...
- Nodejs关闭windows服务进程
1.根据端口号,查询进程信息命令: netstat -aon | findstr "端口号" 2.根据pid杀死进程命令: taskkill /F /pid 进程号 完整代码: c ...
- MySQL中的datetime与timestamp比较(转载)
原文地址:http://database.51cto.com/art/200905/124240.htm 相同 显示 TIMESTAMP列的显示格式与DATETIME列相同.换句话说,显示宽度固定在1 ...
- myeclipse如何删除自带Javaee里面jar包
myeclipse是我们在使用Java开发时的一款不错的集成开发环境软件,一般在开发web项目的时候,都要引入相关的jar包,javaee包就是其中一个,有时候其里面的jar包可能与我们需要的不匹配, ...