c++ - Qt中的毫米纸

标签 c++ qt grid draw qwidget

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

最佳答案

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


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

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

provides a surface for managing a large number of 2D graphical items.

此类已用于charting purposesgrids ,利用上面介绍的绘画 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/

相关文章:

c++ - 使用 cin 跳过预期的字符,如 scanf()

ios - SpriteKit : create centred sprites in grid

javascript - 切换网格显示(我错过了什么?)

c++ - 动态内存分配和输入(流)运算符 C++

c++ - Visual C++ 中模板参数的奇怪行为?

c++ - 如何退出 C++ 中的 void 函数?

c++ - 如何从 QProcess 获取 QWidget 并与之交互

c++ - 尝试使用 Bonjour 运行演示应用程序,但无法发现在同一主机上运行的服务器

c++ - Qt Concurrent 或 std::async 用于新代码?

javascript - 在jqgrid中实现删除和编辑操作