c++ - QT 图形绘图,如何更改 QGraphicsView 的坐标系/几何图形

标签 c++ qt graph graphics2d

我正在使用 QT 并尝试使用 QGraphicsView 和 QGraphicsScene 绘制图表..我不想要任何额外的依赖项,这就是我不使用 QWT 的原因。当我绘制我的数据时,此刻我使用

scene->drawLine(x1,y1,x2,y2,pen);

然后这会在 QGraphicScene 中的两点之间画一条线。但这使用左上角 x=0 y=0 系统...我想使用我自己的系统,如下图所示。另一个问题是我有从 -3 到 +3 的 double 值。有没有人对 QGraphicScene 和 QGraphicsView 有一些经验,可以告诉我如何完成这个?

enter image description here

最佳答案

尝试查看 QGraphicsView::setTransform .该矩阵定义了“场景坐标”如何转换为“ View 坐标”,这是图形编程中的一个常见概念。

还有一些方便的函数 scale()、rotate()、translate() 和 shear() 可以修改 View 的当前变换矩阵。

所以你可以这样做:

scale(1.0, -1.0); // invert Y axis

// translate to account for fact that Y coordinates start at -3
translate(0.0, 3.0); 

// scale Y coordinates to height of widget
scale(1.0, (qreal)viewport()->size().height()/6.0);

并且由于这取决于小部件的大小,您还需要捕获任何调整大小事件并在那里再次重置转换矩阵。假设您希望“3”代表视口(viewport)顶部,“-3”代表底部。

关于c++ - QT 图形绘图,如何更改 QGraphicsView 的坐标系/几何图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16657053/

相关文章:

c++ - 不同平台/系统中限定符大小的变化

c++ - Qt全局样式表加载?

linux - 我如何使用 Qt Framework Installer 创建注册文件类型及其图标?

r - 带有数据框列的 ggplot

python - 将 pandas 数据框列转换为具有源和目标的 networkx 图

c++ - 将 C++ 中的位交换为 double

c# - Windows Phone 8(仅限 C++)- 可以访问设备制造商吗?

c++ - 使用QPainter在Widgets之间画一条线

c++ - 在 Qt 虚拟键盘上实现 Backspace 和 Enter 键

c++ - 在执行 DFS 时在 Boost::graph 中维护迭代器