2012-10-29 34 views
8

Una straordinaria caratteristica di QGraphicsView è la sua capacità di scalare se stessa con il contenuto della sua scena (ogni oggetto QGraphics inserito nella scena in realtà). Il QPixmap che ho inserito correttamente le scale, nel senso che se mi forniscono un fattore di scala di 4x4 con questo:Regolazione dello spessore QPen durante il ridimensionamento di QGraphicsView?

view->scale(4,4); 

Pixmap ingrandito come io voglio fare.

Ma questo non è il caso dei rects che sono abituato a disegnare; mirano a circondare le pixmap che disegno sulla mia scena e indipendentemente dal fattore di scala mantengono uno spessore di 1 invece di - Suppongo - 4.

Ho cercato documentazione su tutte quelle cose, cercando di capire lo scopo esatto della "penna cosmetica", ma non riesco ancora a rendere il mio rettangolo più denso.

Ultimo avviso: ho un personalizzato QGraphicsItem e la QPen che viene utilizzato per disegnare il Rectangled è istanziare on-the-fly nel metodo

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

.

Ha importanza?

Grazie in anticipo e le scuse per la mia mancanza di esperienza/conoscenze sia nel framework Qt ei campi algoritmi di disegno ...

+0

Visualizza utilizzare il codice in cui si crea la 'QPen'. – cmannett85

+0

Eccoci: 'QPen borderPen (Qt :: black); borderPen.setCosmetic (false); pittore-> setPen (borderPen); ' –

risposta

12

in realtà non importa dove si crea un'istanza della QPen.

QPen ha una larghezza predefinita di 0. Questo è un valore speciale che significa che il cosmetico è vero e la larghezza è in realtà 1. Quindi, se non si desidera che la penna sia cosmetica, è necessario impostarla sulla larghezza desiderata . Potrebbe anche essere necessario impostare cosmetici su false.

Ecco un semplice esempio:

#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

L'esempio funziona bene, ma quando commento le righe setWidth(), entrambi i rettangoli mantengono lo stesso spessore nei loro bordi. Grazie comunque –

+1

Questo perché la larghezza predefinita è 0, che è estetica. È necessario modificare la larghezza a 1 o maggiore se si desidera aumentare lo spessore con la scala. – Anthony

+0

Ottimo questo funziona bene! Grazie per la terza volta Anthony :) –