建立QTreeWidget下QTreeWidgetItem的右键菜单

原创 2016年08月30日 19:13:11

基本思路:

  这里要考虑的问题有两个,一个是QTreeWidgetItem的右键功能,一个是确认点击右键之后实现菜单功能。关于QTreeWidgetItem下右键的功能的实现,使用QTreeWidgetItem信号,然后判断是否按下的为鼠标右键。关于菜单功能的实现,则是创建一个QMenu对象,然后将要实现的菜单功能包装到QAction对应的槽函数中。

下面以一个简单的Qt Widgets Application工程为例说明具体实现:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTreeWidgetItem>
#include <QAction>
#include <QMenu>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QAction * test;   //自定义的QAction
private slots:
    void testSlot();   //与QAction想关联的槽函数
    void itemPressedSlot(QTreeWidgetItem *, int);   //用来判断是否是鼠标右键按下的槽函数
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QAction>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    test = new QAction("test", ui->treeWidget);   //因为是在QTreeWidget内实现右键,所以以其作为父类

    connect(ui->treeWidget, SIGNAL(itemPressed(QTreeWidgetItem*,int)), this, SLOT(itemPressedSlot(QTreeWidgetItem*,int)));
    connect(test, SIGNAL(triggered(bool)), this , SLOT(testSlot()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::testSlot()
{
    qDebug() << "Hello, Action";
}

void MainWindow::itemPressedSlot(QTreeWidgetItem * pressedItem, int column)
{
    if(qApp->mouseButtons() == Qt::RightButton)   //判断是否为右键
    {
        QMenu*menu = new QMenu(ui->treeWidget);
        if (pressedItem->text(column) == "A")   //在我的QTreeWidget对象中,有三个QTreeWidgetItem对象,其中有一个内容为“A”
        {
            menu->addAction(test);
            menu->exec(QCursor::pos());   //菜单弹出位置为鼠标点击位置
        }
    }
}

这里不要使用下面的方法实现右键功能

  if(qApp->mouseButtons() == Qt::RightButton)
    {
        ui->treeWidget->addAction(test);
        ui->treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
 }
这样实现的是整个QTreeWidget对象上的右键功能,而不是一个QTreeWidgetItem下的右键功能。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

QTreeView和QTreeWidget样式表的使用案例

由于项目需要,第一次接触到QT样式表。主要是修改QTreeWidget(或者是QTreeView)的界面问题。官方的帮助文档其实起到很大的作用,网上的资料比较杂,而且普遍描述得不清楚。今天花了一些时间...

QT右键菜单、右键下拉菜单、各控件响应右键菜单方法简介 【百度空间】

http://apps.hi.baidu.com/share/detail/24855341 QT右键菜单、右键下拉菜单、各控件响应右键菜单方法简介(持续添加更新中...... QT主窗体右键弹出下拉...
  • fjiale
  • fjiale
  • 2011-06-22 22:38
  • 4183

给QTreeWidget添加右键菜单功能

1、在包含有QTreeWidget的窗体中添加customContextMenuRequested的信号处理,同时要添加setContextMenuPolicy(Qt::CustomContextMe...

在TreeWidget中增加右键菜单功能 以及TreeWidget的基本用法

TreeWidget 与 TreeView 中实现右键菜单稍有不同, TreeView 中是靠信号与槽 connect(ui->treeView,SIGNAL(customContextMenuRe...

[QT]QTreeWidget 的基本用法

QTreeWidget用法实例: void MainWindow::QTreeWidgetTest() { ui->treeWidget->setColumnCount(2); ui->tr...

【Qt开发】Qt gui添加右键菜单事件

要在某一种窗体内添加右键菜单栏,比如在QTreeWidget中添加, 可以用到slot函数customContextMenuRequested(QPointpos)。   如果是在Qt Crea...

Qt QtreeWidget树形控件右键菜单

QTreeWidget *treeView;//QTreeWidget对象 connect(treeView, SIGNAL(customContextMenuRequested(const...

Qt程序学习(三)------QTreeWidget、右键菜单、动态改变comboBox、QTreeWidgetItem的对应列的文字编辑

今天,我在进行Qt编程的时候,关于界面的编制遇到了一些问题,如果一个ComboBox控件的选项直接有关联的话,如何在已经选择的选项前面加上提示,如何动态的改变ComboBox,如何使用右键菜单。在读别...

在QTreeWidget中使得QTreeWidgetItem接受右键出现菜单,部分代码

在QTreeWidget中使得QTreeWidgetItem接受右键出现菜单,部分代码 #include #include #include "tree.h" tree::...

在TreeView中增加右键菜单功能

实现代码如下: //头文件中申明; QMenu *m_grpMenu; QMenu *m_memberMenu; QMenu *m_addAreaMenu; Q...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)