【问题标题】:Millimeter paper in QtQt中的毫米纸
【发布时间】:2014-11-09 09:07:32
【问题描述】:

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

【问题讨论】:

  • 在计算机屏幕上绘制项目时,以像素而不是毫米为单位指定绘图。您的目标是打印到打印机上的毫米尺寸,还是想在屏幕上实现精确的毫米尺寸?
  • 您需要知道屏幕分辨率和屏幕的物理宽度和高度才能知道如何映射像素。
  • 我试图在屏幕上实现精确的毫米尺寸。

标签: c++ qt grid draw qwidget


【解决方案1】:

在重新发明轮子之前,请将一些图表库作为discussed here 考虑在内。 QCustomPlotQwt 都很容易包含,而且定制起来并不难。两者都提供了几个例子;其中之一可能是解决您的问题的解决方案。


如果可用的库不能满足您的需求,您可以通过子类化QWidget重新实现painEvent() 创建自己的解决方案。 QPainterQPainterPath 是任务的关键类。 Qt 提供了很多interesting tutorials,尤其是“基本绘图示例”和“画家路径示例”。可能您也会喜欢this simple examplethis one。从这些参考资料开始,您应该能够轻松绘制网格。

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

提供管理大量 2D 图形项目的表面。

这样的类已被用于charting purposesgrids,利用上面介绍的绘画API。在使用此类时,为了保证整体良好的性能,在 drawBackground() 函数中绘制网格至关重要,例如 here(或使用背景位图)。


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

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

【讨论】:

  • 感谢您的回复。不幸的是,我不能在我的项目中使用 Qwt 等来实现这一点。但是您的公式可能会有所帮助。谢谢
  • 我明白了。好吧,也考虑this nice answer。目的是画一把尺子,但您可以在此基础上(和我的公式)来实现您的目标。
猜你喜欢
  • 1970-01-01
  • 2016-11-05
  • 2018-05-23
  • 2013-01-21
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多