我必须在小部件上绘制毫米网格。是否有任何类(class)可以帮助我做到这一点?
我需要它来绘制一些数学图表。

最佳答案

重新发明轮子之前,请考虑一些图表库discussed hereQCustomPlotQwt都易于包含,自定义也不难。两者都提供了几个示例;可能其中之一可能是解决您的问题的解决方案。

如果可用的库不能满足您的需求,则可以通过子类化QWidget并重新实现painEvent()来创建自己的解决方案。 QPainter QPainterPath 是任务的关键类。Qt提供了许多interesting tutorials,尤其是“Basic Drawing Example”和“Painter Paths Example”。可能您还会喜欢this simple examplethis one。从这些引用资料开始,您应该能够轻松地绘制网格。

最后,Graphics View Framework包含 QGraphicsScene (引用文档)



通过上面介绍的绘画API,此类已用于charting purposesgrids。在使用此类时,至关重要的是要确保总体上良好的性能,并像在here中那样在drawBackground()函数中绘制网格(或使用背景位图)。

讨论的所有API均以像素为单位。如果您真的关心屏幕上的毫米数表示形式,则可以利用QScreen对象,该对象可以从qApp指针直接访问。它提供了几个功能,特别是physicalDotsPerInch()(Android的logicalDotsPerInch(),因为另一个在KitKat上返回了无限值)。毫米的像素近似值可以计算如下:

int dotPerMillimeter = qRound(qApp->primaryScreen()->physicalDotsPerInch() / 25.4)

10-06 10:54