2012-10-29 13 views
8

QGraphicsView'un inanılmaz bir özelliği, sahneyi içeriğiyle (gerçekte sahnedeki her QGraphicsItem aslında) ölçekleme yeteneğidir.QGraphicsView ölçeklenirken QPen kalınlığının ayarlanması?

view->scale(4,4); 

Pixmap yapmak istediğim olarak uzaklaştırdınız: Ben bununla 4x4 bir ölçek faktörünü sağlarsanız, yani doğru terazi ekledikten QPixmap.

Ama bu çizimde alışkınım rects durumunda değildir; Onlar hedefliyor benim sahnede çizmek ve ne olursa olsun ölçek faktörünün, bunlar yerine 1 kalınlığa tutmak pixmaplere çevreleyen - 4.

Ben çalışıyorum, tüm bu şeyler hakkında belgelere arama edilmiştir - sanırım "Kozmetik kalemi" nin tam amacını anlamaya başladım, ancak yine de dikdörtgeni daha kalın hale getirmeyi başaramıyorum.

Son UYARI: Özel bir QGraphicsItem ve dörtköşe çizmek için kullanılır QPen

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

yöntemde on-the-fly instanciated edilir var. o

önemli mi? Qt çerçeve ve çizim algoritmaları alanları hem de tecrübe/bilgi benim eksikliği için şimdiden ve özür içinde

Teşekkür ...

+0

göster kodu kullanın: Burada

basit bir örnek. – cmannett85

+0

İşte gidiyoruz: 'QPen borderPen (Qt :: black); borderPen.setCosmetic (yanlış); ressam-> setPen (borderPen); ' –

cevap

12

Gerçekten olsun QPen örneğini aşmamaktadır.

QPen'in varsayılan genişliği 0'dır. Bu, kozmetik doğru olduğu ve genişliğin aslında 1 olduğu özel bir değerdir. Kalemin kozmetik olmasını istemiyorsanız, istediğiniz genişliğe ayarlamanız gerekir. . Ayrıca kozmetik malzemeyi yanlış olarak ayarlamanız gerekebilir. Eğer `QPen` oluşturmak nerede

#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

Örnek iyi çalışıyor, ancak setWidth() satırlarını yorumladığımda, her iki dikdörtgen de aynı kalınlıkları burada tutuyor. Her neyse, –

+1

Teşekkür ederim, varsayılan genişlik 0, bu da kozmetiktir. Kalınlığın skala ile artmasını istiyorsanız, genişliği 1 veya daha büyük olmalıdır. – Anthony

+0

Bu harika çalışıyor! Üçüncü kez teşekkürler Anthony :) –