Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 使用鼠标在Qtextedit中调整qt图像大小_Image_Resize_Qt5_Qtextedit - Fatal编程技术网

Image 使用鼠标在Qtextedit中调整qt图像大小

Image 使用鼠标在Qtextedit中调整qt图像大小,image,resize,qt5,qtextedit,Image,Resize,Qt5,Qtextedit,我的项目是实现像Word这样的文本编辑器。 除了用鼠标调整图像大小(如Word 2016),其他一切都可以正常工作 如何在QTextEdit中检测图像,如何选择图像,然后用鼠标调整其大小。 我查看了stackoverflow中发布的示例,该示例使用qdialog调整图像大小,但我需要使用鼠标。 有什么想法吗?在QTextEdit中有四种渲染方法 1.QImageFormat 这是QTextEdit中最标准的方法。重要的是QTextCursor处理。 2.QTextObjectInterface

我的项目是实现像Word这样的文本编辑器。 除了用鼠标调整图像大小(如Word 2016),其他一切都可以正常工作 如何在QTextEdit中检测图像,如何选择图像,然后用鼠标调整其大小。 我查看了stackoverflow中发布的示例,该示例使用qdialog调整图像大小,但我需要使用鼠标。
有什么想法吗?

QTextEdit
中有四种渲染方法

1.
QImageFormat
这是
QTextEdit
中最标准的方法。重要的是
QTextCursor
处理。 2.
QTextObjectInterface
这是第二种方法,但非常有用。
3.
QGraphicsPixmapItem
您必须提前导入
QGraphicsView
qgraphicscene
,但它不受
QTextBlock
的限制。它非常方便和自由

4.
QPainter drawImage
它最初是用于非交互式的方式。我在这个答案中不使用它

我推荐(1或2)和3个组合

当鼠标单击时

1.在
QTextEdit
上渲染图像

2.单击图像

3.光标必须在图像之前或之后移动

4.也就是说,光标位置必须在图像之前或之后

5-a.我认为通过QTextCursor处理可以捕捉图像格式

5-b.如果使用
qtexobjectinterface
,则可以捕获“\ufffc”字符

6
Imageformat
属于一个字符,因此您可以使用
QTextCursor
中的
KeepAnchor
标志,通过
movePosition
方法选择并捕获图像

  • 您需要提前准备QG图形引擎
  • 7-1您可以捕捉到
    光标更正
    ,并在
    QTextEdit
    上获得位置。 您可以使用光标的位置以及图像的宽度和高度。 您可以使用它们来指定图像

    然后,您调用QGraphicsSitems。您可以调用
    qgraphicscene.addItem()

  • 您为鼠标处理准备了八个QGraphicsRectItem,为图像准备了一个QGraphicsRectItem

  • 这是准确计算rect位置最重要的事情。 您决定标准位置,并制作八项位置的中心

  • 10.在
    qgraphicsrecitem
    子类中定义控制计算。 你可能想知道计算的方法

    这可能是全局对象,因为它们是临时使用的

    当鼠标移动时

    11.我大致解释一下

    如果鼠标单击左侧的矩形项

    我想你把鼠标光标移到左边,图像会向右扩展

    在MicroSoft Word中,它似乎是同一个控件。总之,您可能不会考虑高度的变化。不用说,您不能更改八个矩形项目的大小

    这可能是一个技巧,
    QGraphicsRectItem.setCursor(QtCore.Qt.PointingHandCursor)
    很有帮助

    我认为变化的比率是+1或-1是最好的。 至少在一开始,这并不复杂,也不容易理解。 我建议您不要匹配鼠标光标的移动。 最终,用户很难协调图像的大小

  • 您可以更新
    QGraphicsRectItem
    的宽度和高度。 您可以同时
    setWidth
    setHeight

  • 这非常重要。您可以在同一位置反复删除并重新插入图像。 用户似乎会自动将图像变大或变小,但图像会立即被删除和添加。 当然,您必须重新插入较大或较小的图像。 您必须在同一位置重新插入。所以您安装了
    setkeepositiononinsert(True)
    插入后,`SetKeepositionOnInsert(False)`可能很重要。因为插入后,位置将位于插入文本的后面

  • 之后

    15.如果结束对图像的操作,将从场景中删除矩形

    16.我忘了说,移动鼠标并将效果连接到rectItem可能需要
    installEventFilter
    。但是如果rectItems是全局的,您可以在
    QTextEdit
    的MouseeEvent处理中调用它们


    p、 如果你听不懂我说的话,请随时发表评论。

    我曾经写过一次答案,但我删除了它,因为我没有接受你的回答。我想你认为我的回答不好,不可理解。但我自己解决了这个问题,因为我也像你一样搜索过这类问题,根据我的经验,目前在网上可能没有答案。如果你想知道答案,请给我一些回复或者把问题的细节写得更清楚。。我离线了一段时间,没有检查你的答案。你能再发一次吗→ QTextImageFormat感谢您的回答,我将尝试实现它