Как сделать так, чтобы qt qgraphicsview масштабировался так, чтобы он не влиял на шаблон пунктирности?
Я рисую несколько прямоугольников внутри QGraphicsView
; Я использую пользовательский шаблон для них, создавая QBrush
со мной QPixmap
, Это отображается с уровнем масштабирования по умолчанию, как и ожидалось.
Когда я звоню view->scale()
прямоугольники появляются больше или меньше, чем я ожидал. Однако Qt масштабировал отдельные биты шаблона пунктирной линии, что не ожидается; Я ожидал, что с помощью кисти снова нарисую прямоугольник большего или меньшего размера. Например. Если бы я использовал рисунок с одной точкой пиксела и пространством между пикселями, после увеличения я хочу видеть прямоугольник большего размера, но мне нужен такой же рисунок с одинаковыми зазорами в пикселях. Это как-то достижимо? Благодарю.
3 ответа
Я столкнулся с той же проблемой при разработке компаньона инструмента EDA в Qt.
После некоторых попыток я сделал (и, похоже, мне помог) создание собственного графического элемента. На метод рисования я делаю:
QBrush newBrush = brush_with_pattern;
newBrush.setTransform(QTransform(painter->worldTransform().inverted()));
painter->setBrush(newBrush);
То есть применить обратное преобразование элемента к кисти (чтобы оно не масштабировалось).
Я думаю, что setDashOffset только для границы фигур (не заливки).
В случае, если кто-то все еще смотрит на это, здесь может помочь связанный с этим вопрос, касающийся масштабирования стандартных шаблонов заливки вместо шаблонов заливки растровым изображением. В принципе, возможно, не удастся изменить масштабирование стандартных шаблонов заливки (перечислено несколько вариантов обхода), но вместо этого работа с альфа-значениями дает желаемый эффект, если вы ищете различные цвета, особенно уровни серого, - и намного меньше запутанный.
Вы можете использовать QPen:: setDashOffset:
http://harmattan-dev.nokia.com/docs/library/html/qt4/qpen.html
Вам нужно будет установить смещение в зависимости от масштаба / масштаба сцены. Вы можете захватить указатель на сцену в вашем элементе, вызвав scene(), но не забудьте проверить NULL, поскольку он будет равен NULL, если не будет добавлен в сцену (хотя теоретически вы не должны получать paint() когда не в сцене).
Другой вариант заключается в использовании:
http://doc.qt.digia.com/qt/qpainter.html
Отменить масштабирование просмотров на вашем художнике.