QT中事件过滤器

news2025/1/20 3:40:07

Qt添加事件过滤器,设置拖放listWidget、TreeWidget、TableWidget控件。
在这里插入图片描述

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);



    //设置控件可以拖放
    ui->listWidgetSourse->setAcceptDrops(true);
    ui->listWidgetSourse->setDragEnabled(true);
    ui->listWidgetSourse->setDefaultDropAction(Qt::CopyAction);
    ui->listWidgetSourse->setDragDropMode(QAbstractItemView::DragDrop);

    ui->listWidget->setAcceptDrops(true);
    ui->listWidget->setDragEnabled(true);
    ui->listWidget->setDefaultDropAction(Qt::CopyAction);
    ui->listWidget->setDragDropMode(QAbstractItemView::DragDrop);

    ui->treeWidget->setAcceptDrops(true);
    ui->treeWidget->setDragEnabled(true);
    ui->treeWidget->setDefaultDropAction(Qt::CopyAction);
    ui->treeWidget->setDragDropMode(QAbstractItemView::DragDrop);

    ui->tableWidget->setAcceptDrops(true);
    ui->tableWidget->setDragEnabled(true);
    ui->tableWidget->setDefaultDropAction(Qt::MoveAction);
    ui->tableWidget->setDragDropMode(QAbstractItemView::DragDrop);

    //为小部件添加事件过滤器
    ui->listWidgetSourse->installEventFilter(this);
    ui->listWidget->installEventFilter(this);
    ui->treeWidget->installEventFilter(this);
    ui->tableWidget->installEventFilter(this);
}

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

void MainWindow::refreshToUI(QGroupBox *currGroupBox)
{
    ui->checkBoxAcceptDrops->setChecked(m_itemView->acceptDrops());
    ui->checkBoxDropEnabled->setChecked(m_itemView->dragEnabled());

    ui->comboBox->setCurrentIndex((int)m_itemView->dragDropMode());
    int index = getGroupActionIndex(m_itemView->defaultDropAction());
    ui->comboBoxDefaultAction->setCurrentIndex(index);

    QFont fout = ui->groupBoxSourse->font();
    fout.setBold(false);
    ui->groupBox->setFont(fout);
    ui->groupBoxList->setFont(fout);
    ui->groupBoxSourse->setFont(fout);
    ui->groupBoxTree->setFont(fout);

    fout.setBold(true);
    currGroupBox->setFont(fout);
}

int MainWindow::getGroupActionIndex(Qt::DropAction actionType)
{
    switch (actionType) {
        case Qt::CopyAction :
            return 0;
        case Qt::MoveAction :
            return 1;
        case Qt::LinkAction :
            return 2;
        case Qt::ActionMask :
            return 3;
        default:
            return 0;
    }
}

Qt::DropAction MainWindow::getGroupActionTyp(int index)
{
    switch (index) {
        case 0:
            return Qt::CopyAction;
        case 1:
            return Qt::MoveAction;
        case 2:
            return Qt::LinkAction;
        case 3:
            return Qt::ActionMask;
        default:
            return Qt::CopyAction;
    }
}


//设置返回值,如果将返回值设置为eventFilter(watched,event);,程序直接奔溃,目前还没有找到原因
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if(event->type() != QEvent::KeyPress){
        return  false;
        // return  eventFilter(watched,event);
    }
    QKeyEvent * keyEvent = static_cast<QKeyEvent*>(event);
    if(keyEvent->key() != Qt::Key_Delete){
         return  false;
      // return   eventFilter(watched,event);
    }

    if(watched == ui->listWidgetSourse){//判断是否是listWidgetSourse委托
        delete ui->listWidgetSourse->takeItem(ui->listWidgetSourse->currentRow());//删除当前行
    }else if(watched == ui->listWidget){
        delete ui->listWidget->takeItem(ui->listWidget->currentRow());//删除当前行
    }else if(watched == ui->treeWidget){
        QTreeWidgetItem * treeItem = ui->treeWidget->currentItem();//获取当前索引项。tree中需要判断这个tree到底有没有父项
        if(treeItem->parent() != nullptr){//判断父索引是否为空
            treeItem->parent()->removeChild(treeItem);
        }else{
            int index = ui->treeWidget->indexOfTopLevelItem(treeItem);
            ui->treeWidget->takeTopLevelItem(index);
        }
        delete treeItem;
    }else if(watched == ui->tableWidget){
        delete ui->tableWidget->takeItem(ui->tableWidget->currentRow(),ui->tableWidget->currentColumn());
    }

    return  eventFilter(watched,event);
     //return true;
}


void MainWindow::on_radioButton_clicked()
{
    m_itemView = ui->listWidgetSourse;
    refreshToUI(ui->groupBoxSourse);
}

void MainWindow::on_radioButtonList_clicked()
{
    m_itemView = ui->listWidget;
    refreshToUI(ui->groupBoxList);
}

void MainWindow::on_radioButtonTree_clicked()
{
    m_itemView = ui->treeWidget;
    refreshToUI(ui->groupBoxTree);
}

void MainWindow::on_radioButtonTable_clicked()
{
    m_itemView = ui->tableWidget;
    refreshToUI(ui->groupBox);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1458084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UML---活动图

活动图概述 活动图&#xff08;Activity Diagram&#xff09;是UML&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;中的一种行为建模工具&#xff0c;主要用于描述系统或业务流程中的一系列活动或操作。活动图通常用于描述用例中的行为&#xff0c…

SimpleDateFormat为什么是线程不安全的?

目录 在日常开发中&#xff0c;Date工具类使用频率相对较高&#xff0c;大家通常都会这样写&#xff1a;这很简单啊&#xff0c;有什么争议吗&#xff1f;格式化后出现的时间错乱。看看Java 8是如何解决时区问题的&#xff1a;在处理带时区的国际化时间问题&#xff0c;推荐使用…

[创业之路-88/管理者与领导者-128]:企业运行分层模型、研发管理全视野

目录 一、企业分层模型 1.1 愿景层 1.2 战略目标层 1.3 战术方法层 1.4 市场业务层 1.5 项目执行层 1.6 资源层 二、研发全视野、全流程 2.1 市场 2.2 战略规划 2.3 产品研发 2.3.1 概述 2.3.2 项目管理 2.3.3 研发业务管理&#xff08;研发经理*N) – 管技术流程…

2024护眼大路灯哪个牌子好?6个挑选妙招助你选择优质落地灯!

如果大家平常关注大路灯&#xff0c;应该都会注意到一个情况——它确实大受众多用户的喜爱以及专业人士的认可&#xff0c;但是关于它的伤眼案例却从未减少。之所以如此矛盾&#xff0c;主要是因为市面上有太多的不专业大路灯&#xff0c;它们的选材用料以及品质非常糟糕&#…

Spring Boot 笔记 028 文章列表

1.1 导入中文语言包 1.2 显示文章分类 //回显文章分类 import { articleCategoryListService } from /api/article.js const articleCategoryList async () > {let result await articleCategoryListService();categorys.value result.data; }articleCategoryList() 1.3…

蓝牙BLE安全-SSP简单安全配对

SSP的配对过程由于可以根据设备的IO能力选择不同的关联模型&#xff0c;因此十分灵活&#xff0c;其提供了四种方式&#xff1a;Numeric Comparison、Passkey Entry、Just Works以及Out of Band (OOB) 。这里关联方式的选择实质上对后面的流程是有一定影响的&#xff0c;如Just…

Python实例|电商API接口数据采集的请求|爬取商品详情描述价格评论

近年来&#xff0c;随着互联网的发展&#xff0c;越来越多的数据以网页的形式存在于各个网站上。对于数据分析师、研究员或者仅仅是对数据感兴趣的人来说&#xff0c;如何高效地提取和分析网页数据成为了一项重要的技能。Python作为一门强大的编程语言&#xff0c;通过其丰富的…

【鸿蒙系统学习笔记】状态管理

一、介绍 资料来自官网&#xff1a;文档中心 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&#xff0c;用户构建了一个UI模型&#xff0c;其中应用的运行时的状态是参数。当参数改变时&#xff0c;UI作为返回结果&#xff0c;也将进行对应的改变。这些运行时的状…

HTML的特殊字符

HTML的特殊字符 有些特殊的字符在 html 文件中是不能直接表示的&#xff0c;例如: 空格&#xff0c;小于号(<)&#xff0c;大于号(>)&#xff0c;按位与(&)。 空格 示例代码&#xff1a; 运行结果&#xff1a; 由于html 标签就是用 < > 表示的&#xff0…

原创个人java开源项目发布maven全球中央仓库详细过程示范和遇到的问题解决办法

文章目录 java项目上传到maven全球中央仓库&#xff08;原创个人开源项目发布maven中央仓库详细过程示范&#xff09;需求背景第一步 注册sonatype账号第二步 登录sonatype账号并申请新建项目第三步 准备个人GPG数字签名并发布到ubuntu第四步 准备maven配置第五步 修改项目配置…

java数据结构与算法刷题-----LeetCode155. 最小栈

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 1. 法一&#xff1a;使用辅助最小栈 解题思路&#xff1a;时间复杂度O(1)…

【Git】Gitbash使用ssh 上传本地项目到github

SSH Git上传项目到GitHub&#xff08;图文&#xff09;_git ssh上传github-CSDN博客 前提 ssh-keygen -t rsa -C “自己的github电子邮箱” 生成密钥&#xff0c;公钥保存到自己的github的ssh里 1.先创建一个仓库&#xff0c;复制ssh地址 git init git add . git commit -m …

机器学习之梯度下降法直观理解

形象化举例&#xff0c;由上图所示&#xff0c;假如最开始&#xff0c;我们在一座大山上的某处位置&#xff0c;因为到处都是陌生的不知道下山的路&#xff0c;所以只能摸索着根据直觉&#xff0c;走一步算一步。在此过程中&#xff0c;每走到一个位置的时候&#xff0c;都会求…

shell运行原理

前言 前一段时间由于身体的缘故和一些琐事&#xff0c;好久没有更新Linux的博文了。从本篇博文开始会接着以前的内容一直持续更新&#xff01; 本期类容介绍 为什么存在shell外壳&#xff1f; 什么是shell外壳&#xff1f; shell外壳是如何工作的&#xff1f; 一、为什么存在…

领域驱动设计(Domain Driven Design)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、场景和要求二、领域模型关键词1.领域2.子域3.通用语言4.限界上下文5.领域模型6.实体和值对象7.聚合根8.领域服务9.领域事件 总结 前言 Domain Driven Desi…

垂起固定翼无人机基础知识,垂起固定翼无人机应用前景,垂起固定翼无人机优缺点分析

无人机定义与类型 无人机&#xff0c;也称为无人驾驶飞行器&#xff0c;是一种无需人工直接操作的航空器。根据其用途、设计及技术特点&#xff0c;可以分为多种类型。垂起固定翼无人机是其中的一种&#xff0c;它具有垂直起降的能力并采用固定翼设计以提高飞行效率和稳定性。…

基于WOA优化的Bi-LSTM多输入时序回归预测(Matlab)鲸鱼算法优化双向长短期神经网络时序回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 鲸鱼优化算法&#xff08;WOA&#xff09;&#xff1a; 双向长短期神经网络&#xff08;Bi-LSTM&#xff09;&#xff1a…

GC调优学习

一.常见工具P62P63 1.jstat 2.visualvm插件 3.Prometheus Grafana 4.GC日志 5.GC Viewer 6.GCeasy&#xff08;强推&#xff09; 二.常见的GC模式P64 三.GC调优 1.优化基础JVM参数P65 2.减少对象产生 看以前视频&#xff0c;内存泄露相关 3.垃圾回收器的选择P66 4.优化垃圾回…

数字孪生核心技术揭秘(一):渲染引擎

数字孪生最早是应用于大型装备制造业领域的一项革命性创新&#xff0c;通过搭建一个将制造流程全部进行整合的数字孪生生产系统&#xff0c;实现从产品设计、到生产计划、再到制造执行的全过程数字化。数字孪生概念与城市数字化管理结合之后&#xff0c;便诞生了“数字孪生城市…

解密短视频上火爆的“私董会”现象

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 最近“私董会”一词再一次上了热门&#xff0c;先是一夜暴火的商业博主dada管培生翻车暴雷&#xff0c;后面是三言财经、互联网大V纷纷发表了自己的看法。 国内领先的私董会服务机构通常每年的收费都在3万元起步。…