拖放到特定区域| Qt的

时间:2018-06-14 09:24:29

标签: c++ qt drag-and-drop qtextedit

我有一个MainWindow,在MainWindow里面有QTextEdit。我想做

  

setAcceptDrop(真)

仅在QTextEdit中

,即我不想在MainWindow中启用drop,但是应该在QTextedit中启用它。 我已经看到了一些例子,我发现它们在MainWindow上实现了拖放机制,所以它会自动在QTextEdit上实现,但我希望它在QTextEdit中专门实现。

我附上了一个示例应用程序的图像供参考!

Example

2 个答案:

答案 0 :(得分:0)

ui->textEdit->setAcceptDrops(true);

答案 1 :(得分:0)

您可以QTextEditObj.setAcceptDrops(True)作为第一个答案。

,您将覆盖其dragEnterEventdragMoveEventdropEvent

QTextEdit子类中。

并检查事件处理程序中的event.mimeData()方法。

例如,

如果要拖放png图像,请event.mimeData().hasFormat("image/png")

如果要使用此功能,最好是具备mimetype知识。

如果为True,则event.accept()

在覆盖方法的所有阶段都进行相同的检查。最后一次,在dropEvent中执行图像处理。

创建QImage对象,并使用event.mimeData()。imageData()获取图像数据,并将其存储为QImage的图像。

如果要在所需的位置绘制图像,则将图像的指针传递给QTextEdit的变量。

然后重写QTextEdit的paintEvent,然后将图像对象传递给painter drawImage方法。

此后,由于drawImage方法需要使用rect来渲染它,因此您可以确定位置并可以在QTextEdit上的任意位置绘制图像。(但是,该图像限制在您放置的位置范围内。如果您要移动它,必须为其编写代码。

或者,如果要将图像数据呈现为TextObject,则应改用QTextObjectInterface,但将其限制在QTextBlock的范围内。