2012-10-29 3 views
8

Одной из замечательных особенностей QGraphicsView является ее способность масштабировать себя с содержимым своей сцены (каждый QGraphicsItem вставлен в сцену на самом деле). QPixmap, что я вставил весы правильно, а это означает, что если я обеспечиваю масштабный коэффициент 4x4 с этим:Регулировка толщины QPen при масштабировании QGraphicsView?

view->scale(4,4); 

Pixmap зуммировании, как я хочу сделать.

Но это не относится к исправлениям, которые я использую для рисования; они нацелены на то, чтобы окружать pixmaps, которые я рисую на своей сцене, и независимо от масштабного коэффициента, они сохраняют толщину 1 вместо - я думаю - 4.

Я искал документацию обо всем этом, пытаясь выяснить точную цель «косметики ручка», но мне все еще не удается заставить мой прямоугольник идти толще.

Последнее уведомление: У меня есть обычай QGraphicsItem и QPen, который используется для рисования rectangled является инстанциирован на лету в методе

virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); 

.

Имеет ли это значение?

Заранее спасибо и извинения за мое отсутствие опыта/знаний как в рамках Qt и полей алгоритмов рисования ...

+0

Показать использовать код, где вы создаете 'QPen'. – cmannett85

+0

Здесь мы идем: 'QPen borderPen (Qt :: black); borderPen.setCosmetic (ложь); painter-> setPen (borderPen); ' –

ответ

12

Это действительно не имеет значения, где вы экземпляр QPen.

QPen имеет ширину по умолчанию 0. Это специальное значение, которое означает, что косметика истинна, а ширина фактически равна 1. Поэтому, если вы не хотите, чтобы перо было косметическим, вы должны установить его на желаемую ширину , Вам также может потребоваться установить косметику в false.

Вот простой пример:

#include <QtGui> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QGraphicsView view; 
    QGraphicsScene scene; 

    QGraphicsRectItem *item1 = scene.addRect(20, 20, 20, 20); 
    QGraphicsRectItem *item2 = scene.addRect(50, 20, 20, 20); 

    QPen pen1, pen2; 
    pen1.setWidth(5); 
    pen2.setWidth(5); 
    pen1.setCosmetic(true); 
    pen2.setCosmetic(false); 

    item1->setPen(pen1); 
    item2->setPen(pen2); 

    view.setScene(&scene); 
    view.scale(4, 4); // both rects are the same size, but one a has wider pen 
    view.show(); 

    return a.exec(); 
} 
+0

Пример отлично работает, но когда я комментирую строки setWidth(), оба прямоугольника имеют одинаковую толщину в ребрах. В любом случае, спасибо –

+1

Это потому, что ширина по умолчанию равна 0, что является косметическим. Вы должны изменить ширину на 1 или больше, если хотите увеличить толщину с помощью шкалы. – Anthony

+0

Отлично, это прекрасно работает! Спасибо, 3-й раз, Энтони :) –