zxd1236587 2023-02-19 22:43 采纳率: 100%
浏览 99
已结题

PYQT/QT/Qtextedit

pyqt或QT在texredit控件中插入多个本地图片后,鼠标在某一图片点击后怎么获取该图片地址。
我的想法如下,但都失败了
1.重写鼠标点击事件,但是texredit里的图片没有鼠标点击事件,无法获取鼠标点击的是哪个图
2.让QTextImageFormat继承QWidget从而获得鼠标点击事件,但继承后无法上传照片

这是我的插入图片代码

    def insertRouteImage(self):
        #getImagePath为自己写的上传图片方法,path为return到的图片路径
        path = self.getImagePath()
        try
            tc = self.textEdit_2.textCursor()
            tif = QTextImageFormat()
            tif.setName(path)
            #获取插入图片的尺寸
            qpixmap = QtGui.QImage(path)
            width = qpixmap.width()
            height = qpixmap.height()

            # 设置图片宽度和高度
            scal = width/900
            scalHeight = height/scal
            tif.setWidth(900)
            tif.setHeight(scalHeight)
            tc.insertImage(tif)

如下图,需要通过鼠标单击或双击返回用户点击的是哪个图片

img

哪位熟悉QT的可以给出解决方案,感激不尽~

  • 写回答

12条回答 默认 最新

  • 提着裤子去拉屎 2023-02-19 23:51
    关注

    要实现鼠标点击texredit控件中的某个图片并获取该图片地址,你可以使用以下方法:

    为每个插入的图片创建一个唯一的标识符,并将其与图片路径关联。例如,你可以将图片路径和一个唯一的整数ID存储在字典中。然后,重写QTextEdit的mousePressEvent方法以捕获鼠标点击事件。在这个方法中,获取鼠标点击位置的QTextCursor对象,然后调用QTextCursor的selectedText方法以获取当前选中的文本。如果选中的文本是一个插入的图片,则从字典中获取该图片的路径并进行后续处理。
    下面是一个示例代码:

    class MyTextEdit(QtWidgets.QTextEdit):
        def __init__(self, parent=None):
            super().__init__(parent)
            self.image_dict = {}
    
        def insertRouteImage(self):
            path = self.getImagePath()
            # 为每个图片创建唯一ID
            image_id = uuid.uuid4().hex
            self.image_dict[image_id] = path
    
            tc = self.textCursor()
            tif = QTextImageFormat()
            tif.setProperty('image_id', image_id)
            # 设置图片宽度和高度
            qpixmap = QtGui.QImage(path)
            width = qpixmap.width()
            height = qpixmap.height()
            scal = width/900
            scalHeight = height/scal
            tif.setWidth(900)
            tif.setHeight(scalHeight)
            tc.insertImage(tif)
    
        def mousePressEvent(self, event):
            # 捕获鼠标点击事件
            if event.button() == QtCore.Qt.LeftButton:
                pos = event.pos()
                cursor = self.cursorForPosition(pos)
                cursor.select(QTextCursor.WordUnderCursor)
                selected_text = cursor.selectedText()
    
                # 如果选中的文本是一个插入的图片,则获取其路径
                image_id = cursor.charFormat().property('image_id')
                if image_id:
                    path = self.image_dict.get(image_id)
                    if path:
                        print(f"Clicked on image: {path}")
                        return
    
            super().mousePressEvent(event)
    
    
    

    在这个示例中,我们使用了Python的uuid模块来为每个插入的图片生成一个唯一的ID。我们还使用了QTextImageFormat的setProperty方法来将每个插入的图片与其ID关联。最后,在mousePressEvent方法中,我们检查当前选中的文本是否是一个插入的图片,并使用字典查找该图片的路径。如果找到了路径,则打印出来。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?

问题事件

  • 系统已结题 3月4日
  • 已采纳回答 2月24日
  • 创建了问题 2月19日

悬赏问题

  • ¥50 gki vendor hook
  • ¥15 centos7中sudo命令无法使用
  • ¥15 灰狼算法和蚁群算法如何结合
  • ¥15 这是一个利用ESP32自带按键和LED控制的录像代码,编译过程出现问题,请解决并且指出错误,指导如何处理 ,协助完成代码并上传代码
  • ¥20 stm32f103,hal库 hal_usart_receive函数接收不到数据。
  • ¥20 求结果和代码,sas利用OPTEX程序和D-efficiency生成正交集
  • ¥50 adb连接不到手机是怎么回事?
  • ¥20 抓取数据时发生错误: get_mooncake_data() missing 1 required positional argument: 'driver'的问题,怎么改出正确的爬虫代码?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联