建立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下的右键功能。


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

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

给QTreeWidget添加右键菜单功能

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

QT右键菜单、右键下拉菜单、各控件响应右键菜单方法简介(转)

QT主窗体右键弹出下拉菜单方法(我的主窗体的类名是CGuiMainwindow): void CGuiMainwindow::contextMenuEvent(QContextMenuEvent...

QT Qtreewidget操作 右键菜单响应等

想完成树节点的右键菜单操作,查阅了很多资料后,终于找到了一种解决方法。但是不敢保证这是好方法,如果有更好的方法,可以留言,共同进步。 qtcreator创建了一个mainwindow工程。 ...

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

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

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

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

QTreeWidget 和QTreeWidgetItem用法总结

QTreeWidgetItem::addChild(QTreeWidgetItem*)   //用于根节点添加子节点 QTreeWidget::setColumnCount ;           ...

Qt中文手册 之 QTreeWidgetItem

头文件:#include 成员函数 1、QTreeWidgetItem::QTreeWidgetItem(int type = Type)     使用类型type构造项,默认类型窗口类型 2、QT...

QTreeWidget简单用法

1、void QTreeWidget::setHeaderLabels(const QStringList & labels) 设置表头,QStringList有几项,表头就有多少列 2、void ...

QTreeWidget树的三态操作

QTreeWidget树的三态切换
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:建立QTreeWidget下QTreeWidgetItem的右键菜单
举报原因:
原因补充:

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