我有一个MainWindow,在MainWindow里面有QTextEdit。我想做
仅在QTextEdit中setAcceptDrop(真)
,即我不想在MainWindow中启用drop,但是应该在QTextedit中启用它。 我已经看到了一些例子,我发现它们在MainWindow上实现了拖放机制,所以它会自动在QTextEdit上实现,但我希望它在QTextEdit中专门实现。
我附上了一个示例应用程序的图像供参考!
答案 0 :(得分:0)
ui->textEdit->setAcceptDrops(true);
答案 1 :(得分:0)
您可以QTextEditObj.setAcceptDrops(True)
作为第一个答案。
,您将覆盖其dragEnterEvent
,dragMoveEvent
,dropEvent
在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
的范围内。