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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA】《接口,抽象方法,抽象类 》之二 、抽象方法详解

抽象方法 详解 一、接口二、抽象方法2.1、抽象方法概念2.2、抽象方法的特点&#xff1a;2.3、抽象方法的作用&#xff1a;2.4、抽象方法的应用&#xff1a;2.5、抽象方法的实践&#xff1a;2.6、使用抽象方法的注意事项 三、抽象类四、开发实践 一、接口 1.1、接口的概念 1.2、…

如何利用Idea创建一个Servlet项目(新手向)

&#x1f495;"Echo"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;如何利用Idea创建一个Servlet项目(新手向) Servlet是tomcat的api,利用Servlet进行webapp开发很方便,本文将介绍如何通过Idea创建一个Servlet项目(一共分为七步,这可能是我们写过的…

简介高效的 CV 入门指南: 100 行实现 ConvNext 图像分类

简介高效的 CV 入门指南: 100 行实现 ConvNext 图像分类 概述ConvNext架构创新参数效率计算效率100 行代码实现 ConvNext 图像分类ConvNext tinyConvNext Base 概述 在当今快速发展的人工智能领域, 计算机视觉 (Computer Vision, CV) 已称为一个关键的研究和应用领域. CV 可以…

学习鸿蒙基础(4)

1.条件渲染 ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态&#xff0c;使用if、else和else if渲染对应状态下的UI内容。 当if、else if后跟随的状态判断中使用的状态变量值变化时&#xff0c;条件渲染语句会进行更新。。 Entry Component struct PageIfElse {Stat…

统信操作系统下数据库管理利器

PL/SQL是一款荷兰公司开发的数据库管理软件&#xff0c;尽管只支持Oracle一种数据库&#xff0c;但是在这一种数据库的支持上深度耕耘了30年&#xff0c;做到了Oracle管理的极致&#xff0c;从而拥有量海量的用户。 当然&#xff0c;随着时间的推移&#xff0c;PL/SQL也出现了一…

鸿蒙-基于ArkTS声明式开发的简易备忘录,适合新人学习,可用于大作业

本文地址&#xff1a;https://blog.csdn.net/qq_40785165/article/details/136161182?spm1001.2014.3001.5502&#xff0c;转载请附上此链接 大家好&#xff0c;我是小黑&#xff0c;一个还没秃头的程序员~~~ 不知不觉已经有很长一段时间没有分享过自己写的东西了&#xff0…

QPainter绘图与QPen、QFont及QBrush详细用法

一.基本绘图属性&#xff1a; 1.基本绘图类&#xff1a; Qt的绘图功能基于QPainter、QPainterDevice和QPainterEngine三个类。QPainter类在窗口和其他绘制设备上执行低级绘制。它提供高度优化的功能来完成大多数图形用户界面程序所需的工作&#xff0c;包括绘制基本的点、线、…

阿里云 OSS

阿里云对象存储服务&#xff08;Object Storage Service&#xff0c;简称 OSS&#xff09; OSS 为 Object Storage Service&#xff0c;即对象存储服务。是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 OSS 具有与平台无关的 RESTful API 接口&#xff0c;可以在任…

深度学习(16)--基于经典网络架构resnet训练图像分类模型

目录 一.项目介绍 二.项目流程详解 2.1.引入所需的工具包 2.2.数据读取和预处理 2.3.加载resnet152模型 2.4.初始化模型 2.5.设置需要更新的参数 2.6.训练模块设置 2.7.再次训练所有层 2.8.测试网络效果 三.完整代码 一.项目介绍 使用PyTorch工具包调用经典网络架构…

vue3项目配置按需自动导入API组件unplugin-auto-import

场景应用&#xff1a;避免写一大堆的import&#xff0c;比如关于Vue和Vue Router的 1、安装unplugin-auto-import npm i -D unplugin-auto-import 2、配置vite.config import AutoImport from unplugin-auto-import/vite//按需自动加载API插件 AutoImport({ imports: ["…

项目发布前如何打tag标签及标签命名规范

项目发布前如何打tag标签及标签命名规范 1.问题背景 我们知道git分支可以理解为一系列提交流水组成的线&#xff0c;如果我们开发的项目到了一个比较重要的阶段&#xff0c;比如项目发布上线&#xff0c;处于方便后期代码的追溯和维护的考虑&#xff0c;如何在繁杂的日志提交…

一般小红书种草达人多少钱,投放注意事项

在互联网时代&#xff0c;小红书成为了广大消费者了解、评价和分享美妆、服饰、生活方式等方面的平台之一。平台上诸多用户的种草帖&#xff0c;已经成为了很多人发现新品、了解产品真实情况的重要渠道。同时众多品牌也纷纷加入了进来&#xff0c;今天我们和大家来分享下一般小…