我必须在小部件上绘制毫米网格。是否有任何类(class)可以帮助我做到这一点?
我需要它来绘制一些数学图表。
最佳答案
重新发明轮子之前,请考虑一些图表库discussed here。 QCustomPlot
和Qwt
都易于包含,自定义也不难。两者都提供了几个示例;可能其中之一可能是解决您的问题的解决方案。
如果可用的库不能满足您的需求,则可以通过子类化QWidget
并重新实现painEvent()
来创建自己的解决方案。 QPainter
和 QPainterPath
是任务的关键类。Qt
提供了许多interesting tutorials,尤其是“Basic Drawing Example”和“Painter Paths Example”。可能您还会喜欢this simple example或this one。从这些引用资料开始,您应该能够轻松地绘制网格。
最后,Graphics View Framework包含 QGraphicsScene
(引用文档)
通过上面介绍的绘画API,此类已用于charting purposes和grids。在使用此类时,至关重要的是要确保总体上良好的性能,并像在here中那样在drawBackground()
函数中绘制网格(或使用背景位图)。
讨论的所有API均以像素为单位。如果您真的关心屏幕上的毫米数表示形式,则可以利用QScreen
对象,该对象可以从qApp
指针直接访问。它提供了几个功能,特别是physicalDotsPerInch()
(Android的logicalDotsPerInch()
,因为另一个在KitKat上返回了无限值)。毫米的像素近似值可以计算如下:
int dotPerMillimeter = qRound(qApp->primaryScreen()->physicalDotsPerInch() / 25.4)