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之密码框不可选中、复制、粘贴、无右键菜单等【转】
简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...
随机推荐
- 【BZOJ4566】[Haoi2016]找相同字符 后缀数组+单调栈
[BZOJ4566][Haoi2016]找相同字符 Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有一个位置不同 ...
- json字符串和json对象的转换
http://www.json.org/提供了一个json2.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法: parse用于从一个 ...
- ubuntu设置开机启动脚本
rc.local脚本 rc.local脚本是一个ubuntu开机后会自动执行的脚本,我们可以在该脚本内添加命令行指令.该脚本位于/etc/路径下,需要root权限才能修改. 该脚本具体格式如下: #! ...
- Eclipse Spring Tool Suite插件安装
目录 Eclipse Spring Tool Suite插件安装 Eclipse Spring Tool Suite插件安装 1.登录网址:http://spring.io/tools/sts/all ...
- easyui的datagrid无数据时下方滚动条不显示的解决办法(标题栏显示不完全)
easyui在写datagrid的时候标题栏有时候因为太多.太长所以无法显示所有的列,而且没数据的时候下方的滚动条是不显示的,这样就无法显示所有的列了.解决办法如下: onLoadSuccess: f ...
- 【Python之路】第十七篇--Ajax全套
概述 1.传统的Web应用 一个简单操作需要重新加载全局数据 2.AJAX AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交 ...
- 命令行操作flask
Flask-Script 先安装pip3 install Flask-Script from sansa import create_app from flask_script import Mana ...
- [Python] Send emails to the recepients specified in Message["CC"]
Recently, I'm working on a small program which needs to send emails to specific accounts. When I wan ...
- mysql的-F与master-data理解(一个小型的big-log恢复)
例子: 使用mysqlbin-log恢复,有两种情况,一个是停数据库,一个是不停 在不停数据库的情况下,为了防止新的写入,需要将bin-log切割,然后新的数据会保存在新的bin-log里面 在此之前 ...
- 和为定值的m个数
和为定值的m个数 np 问题(时间复杂度o(2**n)) code1: 暴力递归 解决 只有正数的情况 class Solution { private List<List<Integer ...