建立QTreeWidget下QTreeWidgetItem的右键菜单

来源:互联网 发布:知乎必须注册吗 编辑:程序博客网 时间:2024/06/06 05:00

基本思路:

  这里要考虑的问题有两个,一个是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_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();private:    Ui::MainWindow *ui;    QAction * test;   //自定义的QActionprivate 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下的右键功能。


0 0
原创粉丝点击