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.mzph.cn/news/636011.shtml

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

相关文章

MacOS X 安装免费的 LaTex 环境

最近把工作终端一步步迁移到Mac上来了&#xff0c;搭了个 Latex的环境&#xff0c;跟windows上一样好用。 选择了 Mactex 做编译&#xff0c;用 Texmaker 做编辑&#xff1b; 1. 下载与安装 1.1 Mactex 下载安装 MacOS 安装和示例 LaTex 的编译器 与 编辑器 编译器使用免费…

Cocos在VsCode中调试-端口安全问题 net::ERR_UNSAFE_PORT

问题: POST http://127.0.0.1:6000/api/login net::ERR_UNSAFE_PORT 原因&#xff1a; 这个错误表明你在尝试使用一个被认为是不安全的端口进行网络请求。通常情况下&#xff0c;浏览器会限制使用一些特定的端口&#xff0c;因为它们被认为是潜在的安全风险。 在这种情况下&a…

IO、NIO、IO多路复用

IO是什么&#xff1f; IO分为两类&#xff0c;它们之间是有区别的&#xff0c;而且有很大的区别&#xff1b;1. 文件系统的IO 也叫本地io&#xff0c;就是和磁盘或者外围存储设备进行读写操作&#xff0c;外围设备有USB、移动硬盘等等&#xff1b;2. 网络的IO 将数据发送给对方…

Jetson Orin Nano使用OpenCV获取视频帧率和帧数的方法

测试过程 首先确认下视频的播放时间 使用cv库来获取帧率和帧数&#xff0c;测试代码如下 import cv2 cap cv2.VideoCapture("xxx.mp4") if not cap.isOpened():print("Cannot open camera")exit()# get default video FPS fps cap.get(cv2.CAP_PROP_F…

Peter算法小课堂—拓扑排序与最小生成树

拓扑排序 讲拓扑排序前&#xff0c;我们要先了解什么是DAG树。所谓DAG树&#xff0c;就是指“有向无环图”。请判断下列图是否是DAG图 第一幅图&#xff0c;它不是DAG图&#xff0c;因为它形成了一个环。第二幅图&#xff0c;它也不是DAG图&#xff0c;因为它没有方向。第三幅…

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......手把手教你如何快速定位bug,如何编写测试用例,快来观摩......作为一名测试人员如果连常见的系统问题都不知道如何分析&#xff0c;频繁将前端人员问题指派给后端人员&#xff0c;后端人员问题指派给前端人员&#xf…

pytest log配置

发现用print在console里面打不出来&#xff0c;所以查了一下关于pytest的log配置&#xff0c;记录 首先需要在根目录新建 pytest.ini 如果你只需要使用print打印日志的话&#xff0c;就只需要这样写 [pytest] addopts -s #addopts 是一个配置项&#xff0c;用于指定传递给 p…

hdu 3709 Balanced Number

Balanced Number 题意 定义一个非负整数在第 p p p 位为 p i v o t pivot pivot 的权重为&#xff1a;这个数位的值 \times 这个数位到 p i v o t pivot pivot 的距离 之和。如果在 p i v o t pivot pivot 左边的权重等于在 p i v o t pivot pivot 右边的权重&#xf…

CSS中隐藏页面元素的几种方式和区别

前言、 在平常的样式排版中&#xff0c;我们经常遇到将某个模块隐藏的场景&#xff0c;通过css隐藏的元素方法有很多种&#xff0c;它们看起来实现的效果是一致的&#xff0c;但实际上每一种方法都有一丝轻微的不同&#xff0c;这些不同决定了在一些特定场合下使用哪一种方法。…

什么是小红书报备达人,报备流程总结!

随着KOL的崛起&#xff0c;品牌方投放达人是司空见惯的事情。所以&#xff0c;关于品牌投放小红书达人时&#xff0c;一定要知道什么是报备。今天来马文化传媒和大家分享下什么是小红书报备达人&#xff0c;报备流程总结&#xff01; 一、什么是小红书报备 小红书报备即是&…

OpenHarmonyOS-gn与Ninja

GN语法及在鸿蒙的使用 [gnninja学习 0x01]gn和ninja是什么 ohos_sdk/doc/subsys-build-gn-coding-style-and-best-practice.md GN 语言与操作 一、gn简介 gn是generate ninja的缩写&#xff0c;它是一个元编译系统&#xff08;meta-build system&#xff09;,是ninja的前端&am…

【Qt】对象树与坐标系

需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、Qt Creator快捷键 二、对象树 1、对象树的析构 2、自定义类的编写…

【原文链接】Tri-Perspective View for Vision-Based 3D Semantic Occupancy Prediction

原文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/papers/Huang_Tri-Perspective_View_for_Vision-Based_3D_Semantic_Occupancy_Prediction_CVPR_2023_paper.pdf 1. 引言 体素表达需要较大的计算量和特别的技巧&#xff08;如稀疏卷积&#xff09;&…

python开发之远程开发工具对比

前言 除了本地开发外&#xff0c;还有一种常见的开发方式就是远程开发&#xff0c;一般情况是一台Windows或mac笔记本作为日常使用的电脑&#xff0c;另有一台linux服务器作为开发服务器。开发服务器的性能往往较强&#xff0c;这样远程开发的方式一方面可以让我们在习惯的系统…

组件(Component):可重用的元素

目标效果&#xff1a;点击粉色按钮后&#xff0c;出现一行“为什么非要点我&#xff1f;”的文字。 用组件的方式实现&#xff1a;首先单击项目文件夹01&#xff0c;然后右键弹窗中点击“添加新文件” 。 选择 QML File 文件&#xff1a; 文件名就叫Button&#xff0c;然后把代…

QoS简介

QoS产生的背景 网络的普及和业务的多样化使得互联网流量激增&#xff0c;从而产生网络拥塞&#xff0c;增加转发时延&#xff0c;严重时还会产生丢包&#xff0c;导致业务质量下降甚至不可用。所以&#xff0c;要在网络上开展这些实时性业务&#xff0c;就必须解决网络拥塞问题…

Three.js 学习笔记之模型(学习中1.20更新) | 组 - 模型 - 几何体 - 材质

文章目录 模型 几何体 材质层级模型组- THREE.Group递归遍历模型树结构object3D.traverse() 模型点模型Points - 用于显示点线模型Line | LineLoop | LineSegments网格模型mesh - 三角形网格模型独有的属性与方法 几何体BufferGeometry缓冲类型几何体BufferGeometry - 基类创…

基于SSM的KTV包厢管理系统(有报告)。Javaee项目,ssm项目。

演示视频&#xff1a; 基于SSM的KTV包厢管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过…

Linux 查看命令有哪些?区别是什么(2023-12-27)

参考文章 linux中ls、cat、vim、more、head、tail、grep同是查看命令&#xff0c;他们之间到底有什么区别&#xff1f; - 知乎 linux中ls、cat、vim、more、head、tail、grep同是查看命令&#xff0c;他们之间到底有什么区别&#xff1f; 1、ls ls&#xff08;英文全拼&…

使用 mybatis-plus 的mybaits的一对多时, total和record的不匹配问题

应该是框架的问题&#xff0c;去官方仓库提了个issues&#xff0c;等回复 https://github.com/baomidou/mybatis-plus/issues/5923 回复来了&#xff1a; 背景 发现 record是两条&#xff0c;但是total显示3 使用resultMap一对多时&#xff0c;三条数据会变成两条&#xff0…