qt QTextEdit选中内容拖拽时的鼠标样式无法设置问题
背景:项目中要实现对QTextEdit里面选中的文字选中后进行拖拽处理, 但是无论设置哪个对象的鼠标样式,都无法生效,都会报一下这个
后面查看这个19的对应的鼠标样式,是DragCopyCursor这个枚举值,原因可能是QTextEdit在选中文字之后拖动时认为是复制的动作; 实际上在拖动选中的文字时,QTextEdit内部qt_scrollarea_viewport生成了一个QDrag对象,而且这个动作是Qt::CopyAction,因此想要改变拖拽的鼠标样式,需要取它里面的子对象中类型是QDrag出来,并且对其检查进行setDragCursor操作即可; 部分代码如下:
// 由于QTextEdit 在拖拽时内部会生成QDrag对象,并且鼠标样式是内部的QDrag对象自己设置,因此想要设置自定义鼠标样式,需要找到源对象中的QDrag对象,并且进行修改复制的鼠标样式(因为是复制操作,所以修改的是CopyAction // 其他可根据动作类型选择后面的参数 (其他拖拽时可以选择外部生成QDrag对象,并且设置拖拽鼠标样式) QDrag *pDrag = (event->source())->findChild<QDrag *>(); if ( pDrag ) pDrag->setDragCursor(QPixmap(":/Image/Common/icon_openhand.png"), Qt::CopyAction);
其中, event为QDropEvent类型,通过它可以找到拖动的来源对象是哪个; 一般这个设置在进入DragEnterEvent里面处理;
另外注意的是, 避免QTextEdit重复触发外面主窗体的DragEnterEvent事件,需要设置禁止本身拖拽属性
m_pTextEdit->setAcceptDrops(false); // 禁止本身接受拖拽
m_pTextEdit为以上操作的目标;
越努力,越幸运
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端