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++ - stdout 和 stderr 字符编码

c++ - QProcess with non-wrapped pipe symbol |在参数列表中

php - 使用 php 在 SlickGrid 中保存更改

c++ - Qt中的函数匹配

javascript - 有人用过 Sigma Grid(基于 Javascript 的可编辑数据网格)吗?

css - 使用 zurb foundation 5 连续 7 列

python - 将 Anaconda MKL 链接到 C++/Cython 程序

c++ - 等待一段代码的功能?

C++ 表达式计算 : What Happens "Under The Hood"?

c++ - Qt5 抛出 std::bad_alloc