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 右键菜单的更多相关文章

  1. (四)Qt之右键菜单

    1.右键菜单创建和显示 作为一种交互性强.使用方便的右键菜单在程序中是非常常用的,在Qt中可以轻松的实现. QMenu menu; //添加菜单项,指定图标.名称.响应函数 menu.addActio ...

  2. Qt添加右键菜单

    QAction *hideAction = new QAction(tr(" 隐藏"),this); addAction(hideAction); setContextMenuPo ...

  3. QML添加右键菜单

    MouseArea { id: mouseRegion anchors.fill: parent; acceptedButtons: Qt.LeftButton | Qt.RightButton // ...

  4. Qt——右键菜单

    所谓“右键菜单”,我们可以这样来看:右键+菜单.所以我们可以定义一个菜单,然后重写鼠标点击事件,令菜单在鼠标右击的时候弹出来.这种方法是可以的,但是Qt提供了一种专门用于右键菜单的方法,且看下面这个属 ...

  5. Qt之QAbstractItemView右键菜单

    一.功能概述 说起右键菜单,之前Qt之自定义QLineEdit右键菜单这篇文章中我已经讲述过3种右键菜单的实现方式,今儿也是在啰嗦一下,针对QListWidget类在定制一下右键菜单,我使用的具体方式 ...

  6. Qt之自定义QLineEdit右键菜单

    一.QLineEdit说明 QLineEdit是单行文本框,不同于QTextEdit,他只能显示一行文本,通常可以用作用户名.密码和搜索框等.它还提供了一些列的信号和槽,方便我们使用,有兴趣的小伙伴可 ...

  7. Qt之密码框不可选中、复制、粘贴、无右键菜单等

    简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...

  8. Qt之国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)

    简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...

  9. 【Qt】Qt之密码框不可选中、复制、粘贴、无右键菜单等【转】

    简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...

随机推荐

  1. Powershell Exchange Server UP Time

    Server up time Get-ExchangeServer | where{$_.name -like'wendy*'} | %{ if(Test-Connection $_.name -Co ...

  2. Spoken English Practice( let me just pull over(pull,give))

    绿色:连读:                  红色:略读:               蓝色:浊化:               橙色:弱读     下划线_为浊化 口语蜕变(2017/6/26) ...

  3. 微信支付 301 500 php 7 simplexml_load_string

    w simplexml_load_string http://stackoverflow.com/questions/35593521/php-7-simplexml

  4. Python菜鸟之路:原生Ajax/Jquery Ajax/IFrame Ajax的选用

    原生Ajax Jquery Ajax IFrame Ajax 如果发送的是普通的数据,比如用户简单的输入.选择的值,推荐使用Jquery ,其次用XMLHttpRquest对象,最次使用IFrame ...

  5. Java 语言基础之运算符

    使用运算符之后,肯定有返回结果. 六种运算符: 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 三元运算符 1. 算术运算符 加(+), 减(-), 乘(*), 除(/), 取余(%), 自 ...

  6. 轻松理解MYSQL MVCC 实现机制

    轻松理解MYSQL MVCC 实现机制 转载https://blog.csdn.net/whoamiyang/article/details/51901888 1. MVCC简介 1.1 什么是MVC ...

  7. 原!!win7-64 安装python的 redis客户端库

    安装python的redis客户端库 本人系统已装python2.7 利用cmd命令行: 1.cmd-->python -->>>进入python命令下 >>> ...

  8. JDK源代码学习系列05----LinkedList

                                             JDK源代码学习系列05----LinkedList 1.LinkedList简单介绍 LinkedList是基于双向 ...

  9. 用仿ActionScript的语法来编写html5——第四篇,继承与简单的rpg

    第四篇,继承与简单的rpg 这次用继承自LSprite的类来实现简单的rpg的demo先看一下最后的代码与as的相似度 var backLayer; //地图 var mapimg; //人物 var ...

  10. python1变量,表达式和语句

    1.变量和类型 变量是指向各种类型值的名字,以后再用到某个值时,直接引用这个名字即可,不用再写具体的值,在python中,变量的使用环境非常宽松,没有明显的变量声明,而且类型不是固定的.如果你不能确定 ...