Qt拖拽组件与键盘事件

1.相关说明

1.设置widget或view的拖拽和放置模式函数setDragDropMode参数说明,NoDragDrop(无拖拽和放置)、DragOnly(只允许拖拽)、DropOnly(只允许放置)、DragDrop(允许拖拽和放置)、InternalMove(只移动不复制)

2.设置widget或view的放置动作函数setDefaultDropAction参数说明,Qt::CopyAction(复制)、Qt::MoveAction(移动)、Qt::LinkAction(创建链接)、Qt::IgnoreAction(忽略,什么都不做)

2.相关界面

3.相关代码

#include "widget.h"
#include "ui_widget.h"
#include <QKeyEvent>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->listSource->setAcceptDrops(true);ui->listSource->setDragEnabled(true);ui->listSource->setDefaultDropAction(Qt::CopyAction);ui->listSource->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);m_itemView = ui->listSource;refreshToUI(ui->groupBox_listSource);ui->listSource->installEventFilter(this);ui->listWidget->installEventFilter(this);ui->treeWidget->installEventFilter(this);ui->tableWidget->installEventFilter(this);
}Widget::~Widget()
{delete ui;
}void Widget::refreshToUI(QGroupBox *curGroupBox)
{ui->chkAcceptDrops->setChecked(m_itemView->acceptDrops());ui->chkDragEnabled->setChecked(m_itemView->dragEnabled());ui->comboDragDropMode->setCurrentIndex((int)m_itemView->dragDropMode());int index = getDropActionIndex(m_itemView->defaultDropAction());ui->comboDefaultDropAction->setCurrentIndex(index);QFont font = ui->groupBox_listSource->font();font.setBold(false);ui->groupBox_listSource->setFont(font);ui->groupBox_listWidget->setFont(font);ui->groupBox_treeWidget->setFont(font);ui->groupBox_tableWidget->setFont(font);font.setBold(true);curGroupBox->setFont(font);
}int Widget::getDropActionIndex(Qt::DropAction actionType)
{switch(actionType){case Qt::CopyAction: return 0;case Qt::MoveAction: return 1;case Qt::LinkAction: return 2;case Qt::IgnoreAction: return 3;default: return 0;}
}Qt::DropAction Widget::getDropActionType(int index)
{switch(index){case 0: return Qt::CopyAction;case 1: return Qt::MoveAction;case 2: return Qt::LinkAction;case 3: return Qt::IgnoreAction;default: return Qt::CopyAction;}
}// 设置listWidget对象
void Widget::on_radioListWidget_clicked()
{m_itemView = ui->listWidget;this->refreshToUI(ui->groupBox_listWidget);
}
// 设置listSource对象
void Widget::on_radioListSource_clicked()
{m_itemView = ui->listSource;this->refreshToUI(ui->groupBox_listSource);
}
// 设置treeWidget对象
void Widget::on_radioTreeWidget_clicked()
{m_itemView = ui->treeWidget;this->refreshToUI(ui->groupBox_treeWidget);
}
// 设置tableWidget对象
void Widget::on_radioTableWidget_clicked()
{m_itemView = ui->tableWidget;this->refreshToUI(ui->groupBox_tableWidget);
}
// 设置 acceptDrops
void Widget::on_chkAcceptDrops_clicked(bool checked)
{m_itemView->setAcceptDrops(checked);
}
// 设置 dragEnabled
void Widget::on_chkDragEnabled_clicked(bool checked)
{m_itemView->setDragEnabled(checked);
}
// dragDropMode选择
void Widget::on_comboDragDropMode_currentIndexChanged(int index)
{m_itemView->setDragDropMode((QAbstractItemView::DragDropMode)index);
}
// defaultDropAction
void Widget::on_comboDefaultDropAction_currentIndexChanged(int index)
{m_itemView->setDefaultDropAction(getDropActionType(index));
}// 事件捕获与过滤
bool Widget::eventFilter(QObject *watched, QEvent *event)
{if(event->type() != QEvent::KeyPress){return QWidget::eventFilter(watched, event);}QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);if(keyEvent->key() != Qt::Key_Delete){return QWidget::eventFilter(watched, event);}if(watched == ui->listSource){delete ui->listSource->takeItem(ui->listSource->currentRow());}else if(watched == ui->listWidget){delete ui->listWidget->takeItem(ui->listWidget->currentRow());}else if(watched == ui->treeWidget){QTreeWidgetItem *curItem = ui->treeWidget->currentItem();if(curItem->parent() != NULL){curItem->parent()->removeChild(curItem);} else {int index = ui->treeWidget->indexOfTopLevelItem(curItem);ui->treeWidget->takeTopLevelItem(index);}delete curItem;} else if(watched == ui->tableWidget){delete ui->tableWidget->takeItem(ui->tableWidget->currentRow(), ui->tableWidget->currentColumn());}return true;
}

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

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

相关文章

RocketMQ源码阅读-Message顺序发送与消费

RocketMQ源码阅读-Message顺序发送与消费 1 普通顺序消息2 严格顺序消息2.1 分配消息队列2.2 移除消息队列2.3 消费消息队列2.3.1 消费消息2.3.2 处理消费结果2.3.3 消息处理队列ProcessQueue2.3.4 小结 3 总结 Message的拉取与消费逻辑&#xff0c;上一篇已经分析过。 这一篇…

基于springboot+vue的社区团购系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

军事智能中的深度强化学习不同于传统的深度强化学习

在军事智能中&#xff0c;“诡”和“诈”是两个最重要的概念。 “诡”变指的是智能体通过采取一些不可预测或复杂的变化策略来获得优势。诡变可能包括逃避对手的观察或引诱对手采取不利的行动。智能体可以使用诡变来欺骗对手&#xff0c;使其做出错误的决策或暴露其策略。 “诈…

Python编辑开发---pycharm pro 2023 中文

PyCharm Pro 2023是一款功能强大的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在提高Python开发人员的生产力。它提供了智能代码编辑、实时代码分析和调试工具&#xff0c;支持版本控制和数据库工具&#xff0c;以及可扩展的插件系统。PyCharm Pro 2023可在多…

医学图像的图像处理、分割、分类和定位-1

一、说明 本报告全面探讨了应用于医学图像的图像处理和分类技术。开展了四项不同的任务来展示这些方法的多功能性和有效性。任务 1 涉及读取、写入和显示 PNG、JPG 和 DICOM 图像。任务 2 涉及基于定向变化的多类图像分类。此外&#xff0c;我们在任务 3 中包括了胸部 X 光图像…

【PyTorch】PyTorch之Tensors索引切片篇

文章目录 前言一、ARGWHERE二、CAT、CONCAT、CONCATENATE三、CHUNK四、GATHER五、MOVEDIM和MOVEAXIS六、PERMUTE七、RESHAPE八、SELECT九、SPLIT十、SQUEEZE十一、T十二、TAKE十三、TILE十四、TRANSPOSE十五、UNBIND十六、UNSQUEEZE十七、WHERE 前言 介绍常用的PyTorch之Tenso…

pytest + allure(windows)安装

背景 软硬件环境&#xff1a; windows11&#xff0c;已安装anaconda&#xff0c;python&#xff0c;pycharm用途&#xff1a;使用pytest allure 生成报告allure 依赖java&#xff0c;点击查看java安装教程 allure 下载与安装 从 allure下载网址下载最新版本.zip文件 放在自…

Spring Web文件上传功能简述

文章目录 正文简单文件上传文件写入 总结 正文 在日常项目开发过程中&#xff0c;文件上传是一个非常常见的功能&#xff0c;当然正规项目都有专门的文件服务器保存上传的文件&#xff0c;实际只需要保存文件路径链接到数据库中即可&#xff0c;但在小型项目中可能没有专门的文…

汽车连接器接线端子和多芯线束连接界面

冷压接的开式压接和闭式压接以及热压接的超声波焊接对汽车连接器接线端子和多芯线束连接界面 连接器接线端子和多芯线束的连接是电子线束行业&#xff0c;特别是汽车行业常用的导线连接方式。汽车整车线束又由许多分支线束组成&#xff0c;而分支线束必须通过连接器实现连接&am…

kafka系列(二)

本章承接kafka一内容&#xff0c;文章在本人博客主页都有&#xff0c;可以自行点击浏览。 幂等性 请求执行多次&#xff0c;但执行的结果是一致的。 如果&#xff0c;某个系统是不具备幂等性的&#xff0c;如果用户重复提交了某个表格&#xff0c;就可能会造成不良影响。例如…

【React基础】– JSX语法

文章目录 认识JSX为什么React选择了JSXJSX的使用 React事件绑定this的绑定问题事件参数传递 React条件渲染React列表渲染列表中的key JSX的本质createElement源码Babel官网查看直接编写jsx代码 虚拟DOM的创建过程jsx – 虚拟DOM – 真实DOM声明式编程 阶段案例练习 认识JSX ◼ …

PPT大神带你飞!!!

1、OneKeyTools 官网&#xff1a;http://oktools.xyz/ OneKeyTools是一款免费开源的PowerPoint第三方平面设计辅助插件&#xff0c;功能涵盖了形状、调色、三维、图片处理、辅助功能等等方面。 插件功能&#xff1a; 插件从面世逐步受到广大PPT设计师和爱好者的追捧&#x…