QT中事件过滤器

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);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Lightfm学习记录

推荐参考资料 官方文档仓库地址论文地址LightFM推荐系统框架学习笔记LightFM推荐模型库(利于入门)how-i-would-explain-building-lightfm-hybrid-recommenders-to-a-5-year-old(用处不大)协同推荐 lightfm 根据用户已读诗词推荐(可能有用)Recommendation System in Python: L…

Learn HTML in 1 hour

website address https://www.youtube.com/watch?vHD13eq_Pmp8 excerpt All right, what’s going on? everybody. It’s your Bro, hope you’re doing well, and in this video I’m going to help you started with html; so sit back, relax and enjoy the show. If y…

Vue3自定义全局指令批量注册

指令封装代码&#xff1a; import type { App } from "vue";const content {mounted(el : any, binding : any) {console.dir(binding.value);el.remove();} };const operate {mounted(el : any, binding : any) {console.dir(binding.value);el.remove();} };cons…

01_02_mysql06_视图-存储过程-函数

视图 使用 视图一方面可以帮我们使用表的一部分而不是所有的表&#xff0c;另一方面也可以针对不同的用户制定不同的查询视图。比如&#xff0c;针对一个公司的销售人员&#xff0c;我们只想给他看部分数据&#xff0c;而某些特殊的数据&#xff0c;比如采购的价格&#xff0…

助力精准可信时空智能:卫星授时安全隔离装置

随着信息化、数字化、智能化发展浪潮的不断推进&#xff0c;各行业对卫星导航授时信息的精准可信度需求也越来越高。面对有意/无意的导航信号欺骗干扰&#xff0c;一旦发生时间信息错误&#xff0c;将导致巨大的经济损失甚至严重的安全事故。在复杂的电磁环境下&#xff0c;亟需…

【Web前端笔记08】CSS盒子模型

08 CSS盒子模型 1、盒子模型 2、border&#xff08;边框&#xff09; 3、padding&#xff08;内边距&#xff09; 4、margin&#xff08;外边距&#xff09; 5、怪异盒子 6、弹性盒模型练习 08 CSS盒子模型 1、盒子模型 标准盒子&#xff1a; 内容&#xff08;content…

Jenkins配置node节点

1、添加节点 2、配置node主机的java环境 注意&#xff0c;jdk的位置和版本要和master保持一致 sudo apt-get update sudo apt-get install openjdk-8-jre vim /etc/enviroment写入&#xff1a;export JAVA_HOME/usr/lib/jvm/openjdk-8-jre 按wq!退出 再输入&#xff1a;s…

Linux环境变量配置文件--《一图胜千言》

这张图是一个关于Linux系统中shell启动时配置文件加载顺序的流程图。图中分为登录shell和非登录shell两种情况&#xff0c;来描述不同配置文件的读取过程。 登录shell&#xff1a; 当用户登录时&#xff0c;会首先检查是否存在/etc/profile文件&#xff0c;如果存在&#xff0c…

【医学大模型】MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化,便于LLM理解和应用

MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化&#xff0c;便于LLM理解和应用 提出背景对比传统医学大模型流程步骤临床指导树流程图识别临床决策支持系统 总结解决方案设计数据收集与处理系统实施临床决策支持 提出背景 论文&#xff1a;https://arxiv.org/p…

大话设计模式——2.简单工厂模式(Simple Factory Pattern)

定义&#xff1a;又称静态工厂方法&#xff0c;可以根据参数的不同返回不同类的实例&#xff0c;专门定义一个类&#xff08;工厂类&#xff09;来负责创建其他类的实例可通过类名直接调用&#xff0c;被创建的实例通常具有共同的父类。 UML图&#xff1a; 例子&#xff1a; 计…

【JVM】双亲委派机制

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;JVM ⛺️稳中求进&#xff0c;晒太阳 双亲委派机制 在Java中如何使用代码的方式去主动加载一个类呢&#xff1f; 方式1&#xff1a;使用Class.forName方法&#xff0c;使用当前类的类加载…

【RL】Value Function Approximation(值函数逼近)

Lecture 8: Value Function Approximation Algorithm for state value estimation Objective function 令 v π ( s ) v_{\pi}(s) vπ​(s)和 v ^ ( s , w ) \hat{v}(s, w) v^(s,w)是真实state value和近似函数。 算法的目标是找到一个最优的 w w w&#xff0c;使得 v ^ …

重铸安卓荣光——上传图片组件

痛点&#xff1a; 公司打算做安卓软件&#xff0c;最近在研究安卓&#xff0c;打算先绘制样式 研究发现安卓并不像前端有那么多组件库&#xff0c;甚至有些基础的组件都需要自己实现&#xff0c;记录一下自己实现的组件 成品展示 一个上传图片的组件 可以选择拍照或者从相册中…

RSA之前端加密后端解密

RSA之前端加密后端解密 RSA加密解密方式有&#xff1a; &#xff08;1&#xff09;公钥加密&#xff0c;私钥解密&#xff1b; &#xff08;2&#xff09;私钥加密&#xff0c;公钥解密&#xff1b; 此文章中以下我使用的是前端公钥加密&#xff0c;后端私钥解密&#xff1b; …

提升竞争力!攻读在职硕士为职业发展加冕——社科院与杜兰大学金融管理硕士

在现如今竞争激烈的职场环境中&#xff0c;不断提升自身的竞争力是每个职场人士都面临的重要任务。攻读在职硕士学位成为越来越多人实现个人职业发展目标的首选方式之一。特别是社科院与杜兰大学合作开设的金融管理硕士项目&#xff0c;为那些希望在金融行业取得突破的职业人士…

欢迎来到IT时代----盘点曾经爆火全网的计算机电影

计算机专业必看的几部电影 计算机专业必看的几部电影&#xff0c;就像一场精彩的编程盛宴&#xff01;《黑客帝国》让你穿越虚拟世界&#xff0c;感受高科技的魅力&#xff1b;《社交网络》揭示了互联网巨头的创业之路&#xff0c;《源代码》带你穿越时间解救世界&#xff0c;这…

智慧驿站_智慧文旅驿站_轻松的驿站智慧公厕_5G智慧公厕驿站_5G模块化智慧公厕

多功能城市智慧驿站是在智慧城市建设背景下&#xff0c;所涌现的一种创新型社会配套设施。其中&#xff0c;智慧公厕作为城市智慧驿站的重要功能基础&#xff0c;具备社会配套不可缺少的特点&#xff0c;所以在应用场景上&#xff0c;拥有广泛的需求和要求。那么&#xff0c;城…

java-kotlin踩坑:错误:找不到符号(点击能跳转到对应类中)

问题描述&#xff1a; 在android用java调用一个kotlin定义的类时&#xff0c;导包正常&#xff0c;点击也能跳转到对应类中&#xff0c;但是在编译运行时会报错&#xff0c;提示找不到符号 解决方法&#xff1a; 第一步&#xff1a;在app级别的build.gradle中添加kotlin-and…

HarmonyOS4.0系统性深入开发35 弹性布局(Flex)

弹性布局&#xff08;Flex&#xff09; 概述 弹性布局&#xff08;Flex&#xff09;提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。容器默认存在主轴与交叉轴&#xff0c;子元素默认沿主轴排列&#xff0c;子元素在主轴方向的尺寸称为主轴尺寸&#xff0…

【动态规划专栏】专题一:斐波那契数列模型--------4.解码方法

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…