我必须在我的小部件上绘制一个毫米网格。是否存在可以帮助我做到这一点的类(class)? 我需要它来绘制一些数学图表。
最佳答案
在重新发明轮子之前,请考虑一些图表库,如 discussed here . QCustomPlot
和 Qwt
都很容易包含并且定制起来也不难。两者都提供了几个例子;可能其中之一可以解决您的问题。
如果可用的库不能满足您的需求,您可以通过子类化 QWidget
和重新实现 painEvent 来创建自己的解决方案()
。 QPainter
和 QPainterPath
是任务的关键类。
Qt
提供了很多interesting tutorials ,尤其是“基本绘图示例”和“画家路径示例”。可能你也会喜欢 this simple example或 this one .从这些引用资料开始,您应该能够轻松绘制网格。
最后,Graphics View Framework包含 QGraphicsScene
哪个(引用文档)
provides a surface for managing a large number of 2D graphical items.
此类已用于charting purposes和 grids ,利用上面介绍的绘画 API。在使用此类时,为了保证整体良好的性能,在 drawBackground()
函数中绘制网格至关重要,例如 here。 (或使用背景位图)。
讨论的所有 API 都以像素 为单位。如果您真的关心屏幕上的精确 毫米表示,您可以利用QScreen
对象,可直接从您的qApp
指针访问。它提供了几个函数,特别是 physicalDotsPerInch()
(Android 的 logicalDotsPerInch()
,因为另一个在 KitKat 上返回无限值)。一毫米的像素近似值可以计算如下:
int dotPerMillimeter = qRound(qApp->primaryScreen()->physicalDotsPerInch() / 25.4)
关于c++ - Qt中的毫米纸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26826677/