精华内容
下载资源
问答
  • QT 右键弹出菜单

    2019-03-28 20:42:00
    QWidget及其子类都可有右键菜单 1.设置标志 在widget初始化的时候 setContextMenuPolicy(Qt::CustomContextMenu); 设置为自定义菜单模式 2.在需要的地方进行信号关联 connect( mBrowserView, &...

    QWidget及其子类都可有右键菜单 

    1.设置标志

    在widget初始化的时候  

    setContextMenuPolicy(Qt::CustomContextMenu);

    设置为自定义菜单模式 

    2.在需要的地方进行信号关联

    connect( mBrowserView, &CivDataSourceTreeView::customContextMenuRequested, this, &CivDataSourceDockWidget::showContextMenu );

    3,实现槽函数

     QMenu *menu = new QMenu( this );
    
    QAction* proDelete = new QAction("删除", this);
    menu->addAction(proDelete);
    connect(proDelete, &QAction::triggered, this, &CivDataSourceDockWidget::deletePro);
    
     menu->popup( mBrowserView->mapToGlobal( pt ) );

     

    转载于:https://www.cnblogs.com/CityLcf/p/10617526.html

    展开全文
  • qt中,关于右键弹出菜单,有几种实现方法: 1-在窗口初始化时,修改指定控件的右键菜单策略,然后把右键点击信号和某个槽函数连接。 //设置btnNew按钮的右键菜单策略 ui->btnNew->...

    在qt中,关于右键弹出菜单,有几种实现方法:

    1-在窗口初始化时,修改指定控件的右键菜单策略,然后把右键点击信号和某个槽函数连接。

        //设置btnNew按钮的右键菜单策略
        ui->btnNew->setContextMenuPolicy(Qt::CustomContextMenu);
        //把btnNew按钮的右键点击信号和槽函数连接
        connect(ui->btnNew,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(on_btnNew_clicked()));

    2-在窗口初始化时,给指定控件安装事件过滤器,然后重写窗口的eventFilter接口函数。

        //设置btnSave按钮的事件过滤器
        ui->btnSave->installEventFilter(this);
    窗口头文件加入eventFilter接口函数的声明:
    protected:
    
        bool eventFilter(QObject *watched, QEvent *event);

    窗口实现文件eventFilter接口函数:

    bool MainWindow::eventFilter(QObject *watched, QEvent *event)
    {
        //检测btnSave按钮的右键菜单事件
        if (watched == ui->btnSave && event->type() == QEvent::ContextMenu)
        {
            QMenu * menu=new QMenu;
            QAction * saveaction=new QAction;
            saveaction->setText("保存按钮右键");
            menu->addAction(saveaction);
            menu->exec(QCursor::pos());
            return true;
        }
        //注意,最后要调用基类QObject的eventFilter接口,否则窗口无法响应
        return QObject::eventFilter(watched,event);
    }

    3-后面两种,跟上边一样,也是在窗口中重写派生保护函数contextMenuEvent和mousePressEvent。

    窗口头文件加入这两个函数的声明:
    protected:
        void contextMenuEvent(QContextMenuEvent *event);
        void mousePressEvent(QMouseEvent *event);

    窗口实现文件:


    //重写窗口contextMenuEvent函数实现label右键菜单
    void MainWindow::contextMenuEvent(QContextMenuEvent *event)
    {
        //把鼠标位置转化成相对于label的位置
        QPoint i = ui->labelSnapshot->mapFromGlobal(event->globalPos());
        //获取label的尺寸
        QRect rect(QPoint(0,0),ui->labelSnapshot->size());
        //然后判断鼠标位置是否在label内.
        if (rect.contains(i))
        {
            QMenu * menu=new QMenu;
            QAction * saveaction=new QAction;
            saveaction->setText("label另存");
            connect(saveaction,SIGNAL(triggered(bool)),this,SLOT(on_btnSave_clicked()));
            menu->addAction(saveaction);
            menu->exec(event->globalPos());
        }
    }

    //重写窗口mousePressEvent函数实现text右键菜单
    void MainWindow::mousePressEvent(QMouseEvent *event)
    {
        if(event->buttons()==Qt::RightButton)
        {
            //把鼠标位置转化成相对于text的位置
            QPoint i = ui->textEdit->mapFromGlobal(event->globalPos());
            //获取text的尺寸
            QRect rect(QPoint(0,0),ui->textEdit->size());
            //然后判断鼠标位置是否在text内.
            if (rect.contains(i))
            {
                QMenu * menu=new QMenu;
                QAction * saveaction=new QAction;
                saveaction->setText("text另存");
                connect(saveaction,SIGNAL(triggered(bool)),this,SLOT(on_btnSave_clicked()));
                menu->addAction(saveaction);
                menu->exec(event->globalPos());
            }
        }
    }

    展开全文
  • Qt右键弹出菜单+图标

    千次阅读 2012-08-24 16:19:25
    ui->tableWidget_gprs->setContextMenuPolicy(Qt::CustomContextMenu);  //这个很重要,要在构造函数里面设置完(此部件定义这种菜单)   this->connect(ui->tableWidget_gprs,SIGNAL...

    ui->tableWidget_gprs->setContextMenuPolicy(Qt::CustomContextMenu);    //这个很重要,要在构造函数里面设置完(此部件定义这种菜单

     

    this->connect(ui->tableWidget_gprs,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(slotShowContextmenu(QPoint)));   //信号和槽函数连接

     

        QMenu *RBmenu;
        QAction *EditAction;
        QAction *DelAction;
        QAction *SaveAction;
     
    
    


    void GprsHelp::slotShowContextmenu(QPointp)
    
    {
        CreateMenu();
    }
    
     void GprsHelp::CreateMenu()
     {
         RBmenu = new QMenu(ui->tableWidget_gprs);
    
         EditAction = RBmenu->addAction("编辑");
    
         DelAction = RBmenu->addAction("删除");
    
         QIcon icon = QIcon(":/save.ico");  //加载图片
          SaveAction = RBmenu->addAction(icon,"保存");
    
    
    
    
         connect(EditAction, SIGNAL(triggered(bool)), this, SLOT(sloMenu_Edit()));
         connect(DelAction, SIGNAL(triggered(bool)), this, SLOT(sloMenu_Del()));
         connect(SaveAction, SIGNAL(triggered(bool)), this, SLOT(slotMenu_Save()));
    
    
         RBmenu->exec(QCursor::pos());//在当前鼠标位置显示
    
    
     }
     
    
    


     

    网友资料:

    Qt中的部件的弹出菜单(ContextMenu),依据ContextMenuPolicy的值的不同,有四种形式:
    一、默认菜单
    此时,ContextMenuPolicy的值为Qt::DefaultContextMenu,这是默认值,其将显示部件定义的默认菜单
    二、无菜单
    此时,ContextMenuPolicy的值为Qt::NoContextMenu
    三、由Action定义菜单
    此时,ContextMenuPolicy的值为Qt::ActionsContextMenu,要为此部件定义这种菜单,很简单,只要把已经定义好的Action部件插入到要显示此菜单的部件中,部件将自动按顺序显示菜单。
    QWidget::addAction(QAction *action);
    四、自定义菜单
    此时,ContextMenuPolicy的值为Qt::CustomContextMenu,这回,有两种方式来定义菜单,一种是响应
    customContextMenuRequested()这个signal,在响应的槽中显示菜单(QMenu的exec()方法)。第二种是需要从这个部件的类中派生一个类,重写contextMenuEvent()这个函数显示菜单(QMenu的exec()方法显示)。

     

    展开全文
  • 现在出现的问题是,我右键点击item1时弹出菜单,然后设置菜单上两个按钮的选中状态,假设将两个按钮都选中,然后我右键点击item2发现item2的右键菜单上的两个action也都被选中了,请问怎么使每个item上的右键菜单的...
  • 本文是在QTreeWidget的item上进行右键弹出右键菜单的使用示例。右键菜单支持多级子菜单。 建立多级右键菜单的数据结构和多级子菜单的动态生成方法。 多级QAction指向一个响应函数,在函数里区别是那个QAction被...

    一、效果预览

    在这里插入图片描述

    二、编写目标

    1. 本文是在QTreeWidget的item上进行右键弹出右键菜单的使用示例。右键菜单支持多级子菜单。
    2. 建立多级右键菜单的数据结构和多级子菜单的动态生成方法。
    3. 多级QAction指向一个响应函数,在函数里区别是那个QAction被选中。并从数据结构取出对应的值。

    三、源代码

    本例子的代码很少,因此把代码直接附录到这里,同时提供了scdn的资源下载,资源里面包括了同样的一份代码。如果有积分直接下载会比较方便一点,避免从这里复制粘贴。
    csdn资源地址为:
    https://download.csdn.net/download/robert_cysy/12004955

    以下为源代码:
    deviceextrainfo.h

    #ifndef DEVICEEXTRAINFO_H
    #define DEVICEEXTRAINFO_H
    
    #include <QList>
    #include <QString>
    
    class DeviceExtraInfo
    {
    public:
        DeviceExtraInfo();
    
        static QList<QString> GetChipManufacturerTypeNameList();
        static QList<QString> GetLedChipTypeNameList(int manufacturer_type);
        static QList<QString> GetLedColorTypeNameList();
    
    private:
    
        const static QList<QList<QString>> chip_type_name_array_;
        const static QList<QString> chip_manufacturer_type_name_array_;
        const static QList<QString> led_color_type_name_array_;
    };
    #endif // DEVICEEXTRAINFO_H
    

    deviceextrainfo.cpp

    #include "deviceextrainfo.h"
    
    const QList<QString> DeviceExtraInfo::chip_manufacturer_type_name_array_= {"child1", "child2", "child3", "child4"};
    const QList<QList<QString>> DeviceExtraInfo::chip_type_name_array_ = {
        {"grandchild1"}, 
        {"grandchild2", "grandchild3", "grandchild4"}, 
        {"grandchild5", "grandchild6"},
        {"grandchild7", "grandchild8"}
    };
    const QList<QString> DeviceExtraInfo::led_color_type_name_array_ = {"Red", "Green", "Blue"};
    
    DeviceExtraInfo::DeviceExtraInfo()
    {
    }
    
    QList<QString> DeviceExtraInfo::GetLedChipTypeNameList(int manufacturer_type) {
        return chip_type_name_array_.at(manufacturer_type);
    }
    
    QList<QString> DeviceExtraInfo::GetChipManufacturerTypeNameList() {
         return chip_manufacturer_type_name_array_;
    }
    
    QList<QString> DeviceExtraInfo::GetLedColorTypeNameList() {
        return led_color_type_name_array_;
    }
    

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    #include <QVBoxLayout>
    #include <QTreeWidget>
    #include <QMenu>
    #include <QList>
    #include <QAction>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    
    private:
        void onItemPressed(QTreeWidgetItem *item, int column);
        void InitMenu();
        void onMenuActionTriggered_ChipType(QAction *action);
        void onMenuActionTriggered_ChipColorType(QAction *action);
    
    private:
        Ui::MainWindow *ui;
    
        QMenu *main_menu_p;
        QList<QAction *> first_menu_action_list_;
        QList<QAction *> chip_manufacture_action_list_;
        QList<QList<QAction *>> chip_type_action_list_;
        QList<QAction *> chip_color_type_action_list_;
    };
    #endif // MAINWINDOW_H
    

    mainwindow.cpp

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    #include <QDebug>
    #include "deviceextrainfo.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        this->resize(400, 400);
    
        InitMenu();
    
        QVBoxLayout *main_v_layout;
        main_v_layout = new QVBoxLayout(ui->centralwidget);
    
        QTreeWidget *tree_widget;
        tree_widget = new QTreeWidget(ui->centralwidget);
        tree_widget->setHeaderLabel("header title");
        connect(tree_widget, &QTreeWidget::itemPressed, this, &MainWindow::onItemPressed);
        main_v_layout->addWidget(tree_widget);
    
        QTreeWidgetItem* group1 = new QTreeWidgetItem(tree_widget);//this pointer is the list to add this item
        group1->setText(0, "haha1");
        group1->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
        group1->setCheckState(0,Qt::Unchecked);
    
        QTreeWidgetItem* group2 = new QTreeWidgetItem(tree_widget);//this pointer is the list to add this item
        group2->setText(0, "haha2");
        group2->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
        group2->setCheckState(0,Qt::Unchecked);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::onItemPressed(QTreeWidgetItem *item, int column) {
        Q_UNUSED(column)
        if (!(QGuiApplication::mouseButtons() & Qt::RightButton)) return;
         main_menu_p->exec(QCursor::pos());
    }
    
    void MainWindow::InitMenu() {
        main_menu_p = new QMenu(this);
        QAction *chip_type_main_action = new QAction(main_menu_p);
        chip_type_main_action->setText(QApplication::translate("MainWindow", "Father"));
        first_menu_action_list_.append(chip_type_main_action);
    
        QAction *chip_color_type_main_action = new QAction(main_menu_p);
        chip_color_type_main_action->setText(QApplication::translate("MainWindow", "Color"));
        first_menu_action_list_.append(chip_color_type_main_action);
    
        main_menu_p->addActions(first_menu_action_list_);
    
        //ic type child menu
        QMenu *child_ic_type_menu = new QMenu();
        QList<QString> chip_manufacture_type_list = DeviceExtraInfo::GetChipManufacturerTypeNameList();
        for (int a = 0; a < chip_manufacture_type_list.count(); a ++) {
            QString name = chip_manufacture_type_list.at(a);
            QAction *action = new QAction();
            action->setText(name);
    
            //chip child child menu
            QList<QAction*> temp_chip_type_list;
            QList<QString> child_child_chip_type_name_list = DeviceExtraInfo::GetLedChipTypeNameList(a);
    
            QMenu *child_child_chip_type_menu = new QMenu();
            for (int b = 0; b < child_child_chip_type_name_list.count(); b ++) {
                QString chip_name = child_child_chip_type_name_list.at(b);
                QAction *chip_action = new QAction();
                chip_action->setText(chip_name);
                temp_chip_type_list.append(chip_action);
            }
            connect(child_child_chip_type_menu, &QMenu::triggered, this, &MainWindow::onMenuActionTriggered_ChipType);
            child_child_chip_type_menu->addActions(temp_chip_type_list);
            action->setMenu(child_child_chip_type_menu);
            child_ic_type_menu->addMenu(child_child_chip_type_menu);
    
            chip_type_action_list_.append(temp_chip_type_list);
    
            chip_manufacture_action_list_.append(action);
        }
    
        child_ic_type_menu->addActions(chip_manufacture_action_list_);
        chip_type_main_action->setMenu(child_ic_type_menu);
        main_menu_p->addMenu(child_ic_type_menu);
    
        //chip color type
        QMenu *child_color_type_menu = new QMenu();
        QList<QString> chip_color_type_list = DeviceExtraInfo::GetLedColorTypeNameList();
        for (int a = 0; a < chip_color_type_list.count(); a ++) {
            QString name = chip_color_type_list.at(a);
            QAction *action = new QAction();
            action->setText(name);
            chip_color_type_action_list_.append(action);
        }
        connect(child_color_type_menu, &QMenu::triggered, this, &MainWindow::onMenuActionTriggered_ChipColorType);
        child_color_type_menu->addActions(chip_color_type_action_list_);
        chip_color_type_main_action->setMenu(child_color_type_menu);
        main_menu_p->addMenu(child_color_type_menu);
    }
    
    void MainWindow::onMenuActionTriggered_ChipType(QAction *action) {
        qDebug() << "ChipType";
        for (int a = 0; a < chip_type_action_list_.count(); a ++) {
            QList<QAction *> action_list = chip_type_action_list_.at(a);
            for (int b = 0; b < action_list.count(); b ++) {
                QAction* action_src = action_list.at(b);
                if(action_src == action) {
                    qDebug() << "index a = " << a << "  index b = " << b;
                    QList<QString> chip_manufacture_type_list = DeviceExtraInfo::GetChipManufacturerTypeNameList();
                    QList<QString> child_child_chip_type_name_list = DeviceExtraInfo::GetLedChipTypeNameList(a);
    
                    QString child_name = chip_manufacture_type_list.at(a);
                    QString grand_child_name = child_child_chip_type_name_list.at(b);
                    qDebug() << "child:" << child_name << "   grand_child:" << grand_child_name;
    
                    return;
                }
            }
        }
    }
    
    void MainWindow::onMenuActionTriggered_ChipColorType(QAction *action) {
        qDebug() << "ChipColorType";
        for (int a = 0; a < chip_color_type_action_list_.count(); a ++) {
            QAction *action_src = chip_color_type_action_list_.at(a);
            if(action_src == action) {
                qDebug() << "index a = " << a;
                QList<QString> chip_color_type_list = DeviceExtraInfo::GetLedColorTypeNameList();
                QString color_name = chip_color_type_list.at(a);
                qDebug() << "color :" << color_name;
                return;
            }
        }
    }
    

    main.cpp

    #include "mainwindow.h"
    #include <QApplication>
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        return a.exec();
    }
    
    展开全文
  • 突然接触到QT开发,在设计界面时,treewidget右键菜单已经设计好,不可改动,且菜单子项需将部分右键选项设为不可用。百般设计后,终于发现QT已封装好,实现过程如下:  QAction *clinkAction = new QAction(ui->...
  • QT鼠标右键弹出菜单

    千次阅读 2019-10-10 09:44:01
    在用QT编程时,有时候要实现鼠标右键弹出菜单的功能.下面代码演示鼠标右键弹出菜单. 1.新建一个QT工程,点击MainWindow.ui,鼠标右键Go to slot.....,添加customContextMenuRequested(const QPoint &pos)...
  • 在用QT编程时,有时候要实现鼠标右键弹出菜单的功能.下面代码演示鼠标右键弹出菜单. 1.新建一个QT工程,点击MainWindow.ui,鼠标右键Go to slot.....,添加customContextMenuRequested(const QPoint &pos)...
  • QMenu----QT鼠标右键弹出菜单

    万次阅读 2018-11-28 17:36:31
    在用QT编程时,有时候要实现鼠标右键弹出菜单的功能.下面代码演示鼠标右键弹出菜单. 1.新建一个QT工程,点击MainWindow.ui,鼠标右键Go to slot.....,添加customContextMenuRequested(const QPoint &amp;pos...
  • Qt之 TableView右键弹出菜单

    千次阅读 多人点赞 2019-04-15 14:34:46
    TableView右键弹出菜单 关于TableView的控件使用,这里不做解释了,直接说诉求,右键点击选中的某一行(术语称item),弹出菜单。操作结果如下图:
  • QT鼠标右键弹出菜单选项

    千次阅读 2020-10-28 16:46:56
    第二步:右键按钮转到槽,信号选择customContextMenuRequested 第三步:转到槽后,在槽函数中搞如下代码 void MainWindow::on_pushButton_customContextMenuRequested(const QPoint &/*pos*/) // 注释掉pos { ...
  • Qt:在指定区域显示右键弹出菜单

    万次阅读 2016-09-23 01:30:59
    Qt:在指定区域显示右键弹出菜单
  • 现在单击空白区域时,item也是选中的状态,右键单击空白区域时,也会弹出菜单项。 右键单击使用的是网上找的以下语句: ui.listView->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui.listView, ...
  • QT新学,参考网上资源,学会了一种为特定Widget添加右键弹出菜单的一种方法: 目标:为ui中的一个widge(变量名:tui.m_VtkWidget)添加右键弹出菜单,通过分隔条为多个菜单项进行分组,示例如下 在主窗口的构造...
  • Qt--右键弹出菜单设计

    千次阅读 2018-10-17 14:53:21
    创建弹出菜单对象 菜单对象可以用QMenu类实现,表示的是弹出菜单。菜单内的对象通过QAction实现。 //创建弹出菜单对象 pMenu = new QMenu(this);//pMenu 为类成员变量 QAction *pAction = new QAction(pMenu);...
  • qt中想给下拉框的每个选项加一个鼠标右键弹出菜单
  • 一、关联菜单策略 QWidget:: contextMenuPolicy 帮助文档: This property holds how the widget shows a context menu. The default value of this property is Qt::DefaultContextMenu, which means the ...
  • //弹出菜单 } } void FilterFrame::resizeEvent(QResizeEvent *event) { //拉伸tableView时,跟随着拉伸的变化 if (m_pErrorView) { int width = m_pErrorView->width(); int scrollWidth = m_pErrorView->...
  • 一、首先得设置上下文菜单策略 this->setContextMenuPolicy(Qt::CustomContextMenu); 二、绑定右击信号、槽函数 我是直接在控件上右击,选择信号:customContextMenuRequested(const QPoint &pos) void ...
  • underMouse(),只有在图表上右键才会弹出菜单 void Curves::contextMenuEvent(QContextMenuEvent* e) { if (m_chartView->underMouse()) //只有鼠标在图表上右键才弹出设置 { QMenu *viewMenu = menuBar()-&...
  • 由图中可以看出,当鼠标在widget控件内右击时,不会弹出菜单 程序如下: void myMainWindow::mousePressEvent(QMouseEvent *event) { if (Qt::RightButton == event->button()) { QMenu *menul

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,623
精华内容 1,449
关键字:

qt右键弹出菜单