2014-11-09 2 views
1

Я должен нарисовать миллиметровую сетку на моем виджете. Существует ли какой-либо класс, который может помочь мне сделать это? Мне нужно, чтобы он рисовал некоторые математические диаграммы.Миллиметровая бумага в Qt

+1

При рисовании элементов на экране компьютера вы указываете рисунок в пикселях, а не в миллиметрах. Вы нацелены на то, что вы можете печатать на принтере в миллиметрах, или пытаетесь добиться точного миллиметрового размера экрана? – docsteer

+0

Вам нужно знать разрешение экрана и физическую ширину и высоту экрана, чтобы знать, как отображать пиксели. –

+0

Im пытается достичь точного размера миллиметра на экране. – Tatarinho

ответ

2

Перед тем как изобретать колесо, пожалуйста, учтите некоторые графические библиотеки как discussed here. И QCustomPlot, и Qwt легко включить, а не так сложно настроить. Оба варианта дают несколько примеров; возможно, одним из них может стать решение проблемы.


Если имеющиеся библиотеки не отвечают вашим потребностям вы можете создать собственное решение по подклассовQWidget и ПереопределениеpainEvent(). QPainter и QPainterPath являются ключевыми классами для задачи. Qt содержит много interesting tutorials, особенно «Пример основного чертежа» и «Пример путей рисования». Вероятно, вам также понравится this simple example или this one. Начиная с этих ссылок, вы сможете легко нарисовать сетку.

Наконец, Graphics View Framework содержит QGraphicsScene, который (со ссылкой на документы)

обеспечивает поверхность для управления большим количеством 2D графических элементов.

Такой класс был использован для charting purposes и grids, используя API для рисования, введенные выше. При использовании этого класса крайне важно гарантировать общую хорошую производительность, провести сетку в функции drawBackground(), как это сделано, например, here (или использовать фоновое растровое изображение).


Все API, обсуждали работу в пикселей. Если вы действительно обеспокоены точным изображением миллиметров на экране, вы можете использовать объект QScreen, непосредственно доступный из вашего указателя qApp. Он предоставляет несколько функций, в частности physicalDotsPerInch() (logicalDotsPerInch() для Android, поскольку другой возвращает бесконечное значение на KitKat). Пиксельное приближение для миллиметра может быть рассчитано следующим образом:

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

Спасибо за ваш ответ. К сожалению, я не могу использовать Qwt и т. Д., Чтобы достичь этого в моем проекте. Но ваша формула может быть полезна. Спасибо – Tatarinho

+0

Я вижу. Ну, рассмотрим также [этот хороший ответ] (http://stackoverflow.com/questions/26828636/efficiently-painting-physically-accurate-ruler-in-qt). Цель состояла в том, чтобы нарисовать линейку, но вы можете использовать это (и мою формулу) для достижения своей цели. – BaCaRoZzo

Смежные вопросы