2012-12-19 32 views
5

Disegno alcuni rettangoli all'interno di QGraphicsView; Per questo utilizzo un modello di stipple personalizzato creando un QBrush con il mio QPixmap. Questo viene visualizzato con il livello di zoom predefinito come previsto.Come fare qt qgraphicsview scale per non influenzare il pattern di stipple?

Quando chiamo view->scale(), i rettangoli appaiono più grandi o più piccoli come mi aspettavo. Tuttavia Qt ha ridimensionato i singoli bit del pattern di stipple che non è previsto; Mi aspettavo che disegnasse di nuovo il rettangolo più grande o più piccolo con il pennello. Es. Se avessi usato un modello di punteggiatura con uno spazio pixel e punti pixel, dopo lo zoom, voglio vedere un rettangolo più grande ma voglio lo stesso modello di punteggiatura con gli stessi spazi vuoti di pixel. Questo è possibile in qualche modo? Grazie.

risposta

5

Ho incontrato lo stesso problema durante lo sviluppo di un compagno di strumenti EDA in Qt.

Dopo aver provato, quello che ho fatto (e sembra funzionare per me) è creare un elemento grafico personalizzato. Sul metodo di vernice, lo faccio:

QBrush newBrush = brush_with_pattern; 
newBrush.setTransform(QTransform(painter->worldTransform().inverted())); 
painter->setBrush(newBrush); 

Che è quello di applicare la trasformazione inversa della voce alla spazzola (in modo che non scala).

Penso che setDashOffset sia solo per il bordo delle forme (non il riempimento).

+0

Non dovrebbe fare lo stesso per impostare ItemIgnoresTransformations? – Schollii

0

Si può usare QPen :: setDashOffset:

http://harmattan-dev.nokia.com/docs/library/html/qt4/qpen.html#setDashOffset

È necessario impostare la base sulle scene livello di zoom/scala di offset. Puoi prendere un puntatore alla scena nel tuo oggetto chiamando scene(), non dimenticare di controllare NULL anche perché sarà NULL se non aggiunto alla scena (anche se in teoria non dovresti ottenere un paint() quando non in una scena).

L'altra opzione è quella di utilizzare:

http://doc.qt.digia.com/qt/qpainter.html#scale

Per annullare il punto di vista di scalatura sul pittore.

+0

Grazie per la risposta. Penso di non aver spiegato bene. Voglio che la dimensione del rettangolo si riduca, ma il modello di punteggiatura rimane invariato. – Kaniyan

+0

utilizzando setDashOffset dovrebbe ottenere tale risultato, ad esempio al 100% l'offset del trattino potrebbe essere 1, quindi al 50% è possibile cambiarlo 0,5 e il modello dovrebbe apparire lo stesso (ma il rect sarà due volte più piccolo). – paulm

+0

Sto usando QBrush per impostare il modello di punteggiatura. Stavo cercando un metodo * Offset nel pennello. Non ho potuto vedere – Kaniyan

0

Nel caso in cui qualcuno stia ancora osservando questo, a related question here per quanto riguarda il ridimensionamento dei modelli di riempimento standard invece dei motivi di riempimento pixmap può essere d'aiuto. Fondamentalmente, potrebbe non essere possibile modificare il ridimensionamento dei pattern di riempimento standard (sono elencate alcune idee alternative), ma, lavorando con valori alpha, si ottiene invece l'effetto desiderato se si cercano colori variabili, in particolare i livelli di grigio - ed è molto meno contorto.