zoukankan      html  css  js  c++  java
  • 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,也就是目录区,方法二右键的有效区为全部屏幕

  • 相关阅读:
    交换机/路由器上的 S口 F口 E口
    对称加密&非对称加密
    字节流和字符流 in Java
    Python中使用MySQL
    完全二叉树、理想二叉树满二叉树
    优化MySchool数据库设计
    关于SQL储存过程中输出多行数据
    关于本月第一天,本月最后一天的SQL代码
    SQL常见的系统存储过程
    相关子查询【SQL Server】
  • 原文地址:https://www.cnblogs.com/etwd/p/4516472.html
Copyright © 2011-2022 走看看