python qt 将QGraphicsView对象传入qt编写的dll中绘图
时间: 2023-07-13 16:21:03 浏览: 163
用于QT启动时报错:找不到python36.dll
要在Qt编写的DLL中使用Python传递的QGraphicsView对象进行绘图,可以使用QPainter类在QGraphicsView上绘制图形。下面是一个简单的示例代码:
Qt编写的DLL中的函数:
```cpp
#include <QGraphicsView>
#include <QPainter>
#ifdef Q_OS_WIN
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif
extern "C"
{
EXPORT void draw(QGraphicsView* view, float x, float y)
{
QPainter painter(view->viewport());
painter.setPen(Qt::red);
painter.drawEllipse(QPointF(x, y), 10, 10);
}
}
```
Python中的代码:
```python
import ctypes
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene
from PyQt5.QtCore import QPointF
# load the DLL
mydll = ctypes.cdll.LoadLibrary("mydll.dll")
# get the function
draw = mydll.draw
draw.argtypes = [ctypes.POINTER(QGraphicsView), ctypes.c_float, ctypes.c_float]
# create a QGraphicsView object
view = QGraphicsView()
scene = QGraphicsScene()
view.setScene(scene)
# add the QGraphicsView object to a layout or a window
# call the function to draw a circle at (100, 100)
draw(ctypes.pointer(view), 100, 100)
```
注意事项:
1. 在Qt编写的DLL中,需要使用QPainter类绘制图形。在这个例子中,我们在QGraphicsView的视口上绘制一个红色的圆形。
2. 在Python中,需要先创建一个QGraphicsScene对象,并将其设置为QGraphicsView的场景,以便在其中绘制图形。
3. 在Qt编写的DLL中,需要使用QPointF类表示绘制图形的位置。在Python中,可以使用PyQt5.QtCore.QPointF类来创建一个QPointF对象。
阅读全文