QListWidget、QTreeWidget、QTableWidget的拖放

 QListWidget、QTreeWidget、QTableWidget的拖放实验

QAbstractItemView::DragDropMode 的枚举值

QAbstractItemView::NoDragDrop0组件不支持拖放操作
QAbstractItemView::DragOnly1组件只支持拖动操作
QAbstractItemView::DropOnly 2组件只支持放置操作
QAbstractItemView::DragDrop3组件支持拖放操作
QAbstractItemView::InternalMove4组件只支持内部项的移动操作,例如目录树内节点的移动操作

 Qt::DropAction 的枚举值

Qt::CopyAction 1将数据复制到放置点组件处
Qt::MoveAction2将数据从拖动点组件处移动到放置点组件处
Qt::LinkAction 4在拖动点组件和放置点组件之间建立数据连接
Qt::IgnoreAction 0对数据不进行任何操作

效果

DragDropItemExample.h

#ifndef DRAGDROPITEMEXAMPLE_H
#define DRAGDROPITEMEXAMPLE_H#include <QWidget>
#include <QAbstractItemView>
#include <QGroupBox>
#include <QEvent>namespace Ui {
class DragDropItemExample;
}class DragDropItemExample : public QWidget
{Q_OBJECT
private://将枚举值 转换为indexint getDropActionIndex(Qt::DropAction actionType);//将index转换为枚举值Qt::DropAction getDropActionType(int index);//当前设置属性的item widgetQAbstractItemView * m_ItemView = nullptr;//m_ItemView的属性显示到界面上void refreshToUI(QGroupBox *curGroupBox);
protected://重写事件过滤器bool eventFilter(QObject *watched, QEvent *event);public:explicit DragDropItemExample(QWidget *parent = nullptr);~DragDropItemExample();private slots:void on_radioSource_clicked();void on_radioList_clicked();void on_radioTree_clicked();void on_radioTable_clicked();void on_chkAccetDrops_clicked(bool checked);void on_chkDragEnabled_clicked(bool checked);void on_comboMode_currentIndexChanged(int index);void on_comboDefaultAction_currentIndexChanged(int index);private:Ui::DragDropItemExample *ui;
};#endif // DRAGDROPITEMEXAMPLE_H

DragDropItemExample.cpp

#include "dragdropitemexample.h"
#include "ui_dragdropitemexample.h"#include <QMessageBox>
#include <QKeyEvent>int DragDropItemExample::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 DragDropItemExample::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;}
}void DragDropItemExample::refreshToUI(QGroupBox *curGroupBox)
{ui->chkAccetDrops->setChecked(m_ItemView->acceptDrops());ui->chkDragEnabled->setChecked(m_ItemView->dragEnabled());ui->comboMode->setCurrentIndex((int)m_ItemView->dragDropMode());int index = getDropActionIndex(m_ItemView->defaultDropAction());ui->comboDefaultAction->setCurrentIndex(index);QFont font = ui->groupBox->font();font.setBold(false);ui->groupBox_source->setFont(font);ui->groupBox_list->setFont(font);ui->groupBox_tree->setFont(font);ui->groupBox_table->setFont(font);font.setBold(true);curGroupBox->setFont(font);
}bool DragDropItemExample::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){//如果按下的不是delete键 ,退出return QWidget::eventFilter(watched,event);}if(watched == ui->listSource){QListWidgetItem *item = ui->listSource->takeItem(ui->listSource->currentRow());delete item;//最后释放item}else if(watched == ui->listWidget){QListWidgetItem *item = ui->listWidget->takeItem(ui->listWidget->currentRow());delete item;//最后释放item}else if(watched== ui->treeWidget){QTreeWidgetItem *item = ui->treeWidget->currentItem();if(item->parent()!=nullptr){QTreeWidgetItem *parent =item->parent();parent->removeChild(item);}else{//顶级节点的删除takeTopLevelItem(index)int index = ui->treeWidget->indexOfTopLevelItem(item);ui->treeWidget->takeTopLevelItem(index);}delete item;//最后释放item}else if(watched == ui->tableWidget){//删除对应的单元格QTableWidgetItem *item =ui->tableWidget->takeItem(ui->tableWidget->currentRow(),ui->tableWidget->currentColumn());delete item;}return true;// eventFilter 返回true表示事件已经处理
}DragDropItemExample::DragDropItemExample(QWidget *parent): QWidget(parent), ui(new Ui::DragDropItemExample)
{ui->setupUi(this);//evenFilter 需要给控件安装事件过滤器ui->listSource->installEventFilter(this);ui->listWidget->installEventFilter(this);ui->treeWidget->installEventFilter(this);ui->tableWidget->installEventFilter(this);//设置四个组件的 拖放操作属性ui->listSource->setAcceptDrops(true);ui->listSource->setDragDropMode(QAbstractItemView::DragDrop);ui->listSource->setDragEnabled(true);ui->listSource->setDefaultDropAction(Qt::CopyAction);ui->listWidget->setAcceptDrops(true);ui->listWidget->setDragDropMode(QAbstractItemView::DragDrop);ui->listWidget->setDragEnabled(true);ui->listWidget->setDefaultDropAction(Qt::CopyAction);ui->treeWidget->setAcceptDrops(true);ui->treeWidget->setDragDropMode(QAbstractItemView::DragDrop);ui->treeWidget->setDragEnabled(true);ui->treeWidget->setDefaultDropAction(Qt::CopyAction);ui->tableWidget->setAcceptDrops(true);ui->tableWidget->setDragDropMode(QAbstractItemView::DragDrop);ui->tableWidget->setDragEnabled(true);ui->tableWidget->setDefaultDropAction(Qt::CopyAction);}DragDropItemExample::~DragDropItemExample()
{delete ui;
}void DragDropItemExample::on_radioSource_clicked()
{m_ItemView= ui->listSource;refreshToUI(ui->groupBox_source);
}void DragDropItemExample::on_radioList_clicked()
{m_ItemView= ui->listWidget;refreshToUI(ui->groupBox_list);
}void DragDropItemExample::on_radioTree_clicked()
{m_ItemView= ui->treeWidget;refreshToUI(ui->groupBox_tree);
}void DragDropItemExample::on_radioTable_clicked()
{m_ItemView= ui->tableWidget;refreshToUI(ui->groupBox_table);
}void DragDropItemExample::on_chkAccetDrops_clicked(bool checked)
{m_ItemView->setAcceptDrops(checked);
}void DragDropItemExample::on_chkDragEnabled_clicked(bool checked)
{m_ItemView->setDragEnabled(checked);
}void DragDropItemExample::on_comboMode_currentIndexChanged(int index)
{QAbstractItemView::DragDropMode mode=(QAbstractItemView::DragDropMode)index;//将index强制转换为 dragDropModem_ItemView->setDragDropMode(mode);qDebug()<<QString("DragDropMode:%1").arg(index);
}void DragDropItemExample::on_comboDefaultAction_currentIndexChanged(int index)
{Qt::DropAction actionType=getDropActionType(index);m_ItemView->setDefaultDropAction(actionType);}

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

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

相关文章

Python中JSON处理技术的详解

引言 JSON&#xff08;JavaScript Object Notation&#xff09;作为当前最流行的数据传输格式&#xff0c;在Python中也有多种实现方式。由于JSON的跨平台性和简便易用性&#xff0c;它在数据交互中被广泛应用。本文将重点讨论如何熟练应用Python的JSON库&#xff0c;将JSON数…

FFmpeg 实现从麦克风获取流并通过RTMP推流

使用FFmpeg库实现从麦克风获取流并通过RTMP推流&#xff0c;FFmpeg版本为4.4.2-0。RTMP服务器使用的是SRS&#xff0c;我这边是跑在Ubuntu上的&#xff0c;最好是关闭掉系统防火墙。拉流端使用VLC。如果想要降低延时&#xff0c;请看我另外一篇博客&#xff0c;里面有说降低延时…

浏览器开发者视角及CSS表达式选择元素

点击想要查看的接口&#xff0c;然后点击检查&#xff0c;便可以切换到该接口对应的html代码 如果F12不起作用的话&#xff0c;点击更多工具&#xff0c;然后选择开发者工具即可 ctrlF可以去查阅相关的CSS表达式选择元素 如果没有加#t1&#xff0c;那么表示的是选择所有的p 使用…

图解HTTP(5、与 HTTP 协作的 Web 服务器 6、HTTP 首部)

5、与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站&#xff0c;也可作为通信路径上的中转服务器提升传输效率。 用单台虚拟主机实现多个域名 在相同的 IP 地址下&#xff0c;由于虚拟主机可以寄存多个不同主机名和域名的 Web 网站&#xff0c;因此…

Linux-多线程

线程的概念 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行&#xff0c;本质是在进程地址空间内运行在Linux系统中&#xff0c;在CPU眼中…

Labview_压缩文件

调用顺序 源文件 生成后的文件 1.新建ZIP文件 生成ZIP文件的路径&#xff1a;为最终生成ZIP文件的路径&#xff0c;需要提供ZIP文件的名称和类型 2.添加文件到压缩文件 源文件路径&#xff1a;为需要压缩的文件路径&#xff0c;非文件夹路径 生成ZIP文件时的路径&#x…

区域特征检测工具的使用

区域特征检测工具的使用 选择区域-》右键-》工具->特征检测

实践致知第12享:如何新建一个Word并设置格式

一、背景需求 小姑电话说&#xff1a;要新建一个Word文档&#xff0c;并将每段的首行设置空2格。 二、解决方案 1、在电脑桌面上空白地方&#xff0c;点击鼠标右键&#xff0c;在下拉的功能框中选择“DOC文档”或“DOCX文档”都可以&#xff0c;如下图所示。 之后&#xff0…

(图文详解)小程序AppID申请以及在Hbuilderx中运行

今天小编给大家带来了如何去申请APPID&#xff0c;如果你是小程序的开发者&#xff0c;就必须要这个id。 申请步骤 到小程序注册页面&#xff0c;注册一个小程序账号 微信公众平台 填完信息后提交注册 会在邮箱收到 链接激活账号 确认。邮箱打开链接后&#xff0c;会输入实…

一、openGauss详细安装教程

一、openGauss详细安装教程 一、安装环境二、下载三、安装1.创建omm用户2.授权omm安装目录3.安装4.验证是否安装成功5.配置gc_ctl命令 四、配置远程访问1.配置pg_hba.conf2.配置postgresql.conf3.重启 五、创建用户及数据库 一、安装环境 Centos7.9 x86openGauss 5.0.1 企业版…

nvm下载

nvm下载 1.下载nvm安装包2.安装nvm3.修改settings.txt4.安装成功5.继续配置 下载nvm之前,你最好将你电脑上的node卸载掉,直接在winx中卸载就行 1.下载nvm安装包 https://github.com/coreybutler/nvm-windows/releases 2.安装nvm 3.修改settings.txt root: E:\nvm\install\nv…

Golang | Leetcode Golang题解之第225题用队列实现栈

题目&#xff1a; 题解&#xff1a; type MyStack struct {queue []int }/** Initialize your data structure here. */ func Constructor() (s MyStack) {return }/** Push element x onto stack. */ func (s *MyStack) Push(x int) {n : len(s.queue)s.queue append(s.queu…

08.C2W3.Auto-complete and Language Models

往期文章请点这里 目录 N-Grams: OverviewN-grams and ProbabilitiesN-gramsSequence notationUnigram probabilityBigram probabilityTrigram ProbabilityN -gram probabilityQuiz Sequence ProbabilitiesProbability of a sequenceSequence probability shortcomingsApproxi…

字节码编程javassist之生成带有注解的类

写在前面 本文看下如何使用javassist生成带有注解的类。 1&#xff1a;程序 测试类 package com.dahuyou.javassist.huohuo.cc;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import ja…

保姆级教程:Linux (Ubuntu) 部署流光卡片开源 API

流光卡片 API 开源地址 Github&#xff1a;https://github.com/ygh3279799773/streamer-card 流光卡片 API 开源地址 Gitee&#xff1a;https://gitee.com/y-gh/streamer-card 流光卡片在线使用地址&#xff1a;https://fireflycard.shushiai.com/ 等等&#xff0c;你说你不…

0基础学会在亚马逊云科技AWS上搭建生成式AI云原生Serverless问答QA机器人(含代码和步骤)

小李哥今天带大家继续学习在国际主流云计算平台亚马逊云科技AWS上开发生成式AI软件应用方案。上一篇文章我们为大家介绍了&#xff0c;如何在亚马逊云科技上利用Amazon SageMaker搭建、部署和测试开源模型Llama 7B。下面我将会带大家探索如何搭建高扩展性、高可用的完全托管云原…

FullCalendar的使用,react日历组件

1.下载 yarn add fullcalendar/core fullcalendar/react fullcalendar/daygrid 2.运行 import React from react; import FullCalendar from "fullcalendar/react"; import dayGridPlugin from "fullcalendar/daygrid";const ExperimentalSchedule () …

初识STM32:寄存器编程 × 库函数编程 × 开发环境

STM32的编程模型 假如使用C语言的方式写了一段程序&#xff0c;这段程序首先会被烧录到芯片当中&#xff08;Flash存储器中&#xff09;&#xff0c;Flash存储器中的程序会逐条的进入CPU里面去执行。 CPU相当于人的一个大脑&#xff0c;虽然能执行运算和执行指令&#xff0c;…

面试官:讲一下如何终止一个 Promise 继续执行

我们知道 Promise 一旦实例化之后&#xff0c;状态就只能由 Pending 转变为 Rejected 或者 Fulfilled&#xff0c; 本身是不可以取消已经实例化之后的 Promise 了。 但是我们可以通过一些其他的手段来实现终止 Promise 的继续执行来模拟 Promise 取消的效果。 Promise.race …

SAP_MMABAP模块_MM60物料清单新增物料组描述字段

业务背景&#xff1a; 用户需要在系统标准的物料主数据查询报表MM60中&#xff0c;添加物料组描述&#xff0c;一直以来&#xff0c;我都觉得标准的MM60显示的内容字段不够多&#xff0c;不太好用。 以往都是给用户新开发一个物料主数据查询报表来解决的&#xff0c;但是这次刚…