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,也就是目录区,方法二右键的有效区为全部屏幕

  • 相关阅读:
    【转载】Unity的内存管理与性能优化
    [转载]有关placement new
    国内外有用的课程资源
    os模块批量重命名多个工作簿
    利用xlwings将一个工作表,拆成多个工作簿
    利用xlwings批量打开同一文件夹下的N多EXCEL表格
    回归初心,探索真我写在2022年的开始
    利用xlwings在多个工作簿中批量新增工作表
    今日份试题,关于Python办公自动化应用
    随想
  • 原文地址:https://www.cnblogs.com/etwd/p/4516472.html
Copyright © 2011-2022 走看看