2012-10-29 5 views
8

Eine erstaunliche Eigenschaft von QGraphicsView ist seine Fähigkeit, sich mit dem Inhalt seiner Szene zu skalieren (jedes QGraphicsItem, das tatsächlich in der Szene eingefügt wird). Die QPixmap, die ich Waage richtig eingelegt haben, was bedeutet, dass, wenn ich einen Skalierungsfaktor von 4x4 mit diesem bieten:Anpassen der QPen-Dicke beim Skalieren von QGraphicsView?

view->scale(4,4); 

Pixmap gezoomt werden als ich tun möchte.

Aber das ist nicht der Fall der Rezepte, die ich zu zeichnen gewohnt bin; sie zielen darauf ab, die Pixmaps zu umgeben, die ich auf meiner Szene zeichne, und unabhängig vom Skalierungsfaktor, behalten sie eine Dicke von 1 statt - ich denke - 4.

Ich habe Dokumentation über all diese Sachen gesucht, versucht zu finde den genauen Zweck des "Kosmetikstiftes" heraus, aber ich kann es immer noch nicht schaffen, mein Rechteck dicker zu machen.

Letzte Nachricht: Ich habe eine benutzerdefinierte QGraphicsItem und die QPen, die verwendet wird, um die Rectangled zu ziehen, instanziiert on-the-fly in der

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

Methode.

Spielt es eine Rolle?

Vielen Dank im Voraus und entschuldige mich für meinen Mangel an Erfahrung/Wissen sowohl in der Qt-Framework und die Zeichnungsalgorithmen Felder ...

+0

zeigt den Code verwenden, in dem Sie den 'QPen' erstellen. – cmannett85

+0

Hier gehen wir: 'QPen borderPen (Qt :: schwarz); borderPen.setCosmetic (false); painter-> setPen (borderPen); ' –

Antwort

12

Es ist nicht wirklich wichtig, wo Sie die QPen instanziiert.

QPen hat eine Standardbreite von 0. Dies ist ein spezieller Wert, der bedeutet, dass Kosmetik wahr ist und die Breite tatsächlich 1 ist. Wenn Sie also nicht möchten, dass der Stift kosmetisch ist, müssen Sie ihn auf die gewünschte Breite einstellen . Möglicherweise müssen Sie auch kosmetisch auf false setzen.

Hier ist ein einfaches Beispiel:

#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

Das Beispiel funktioniert gut, aber wenn ich die setWidth() Zeilen kommentiere, behalten beide Rechtecke die gleiche Dicke in den Kanten. Vielen Dank trotzdem –

+1

Das ist, weil die Standardbreite 0 ist, was kosmetisch ist. Sie müssen die Breite auf 1 oder größer ändern, wenn Sie möchten, dass die Dicke mit der Skala zunimmt. – Anthony

+0

Großartig, das funktioniert gut! Danke für das 3. Mal Anthony :) –

Verwandte Themen