2014-04-10 21 views
6

Sto provando a creare un QTableView che può essere ingrandito e ridotto come in Excel.
Una domanda simile è stato chiesto qui: Zooming function on a QWidgetQTableView Zoom avanti/indietro

Tuttavia, sono sottoclasse il QTableView in PyQt e non C così reimplementare l'intero metodo paintEvent è un po 'evoluto. Il codice sorgente per questo è un po 'complesso: https://qt.gitorious.org/qt/tiittane-qt/source/bdd4a9149789f60974603e1f7621d51378f0a108:src/gui/itemviews/qtableview.cpp#L1282

Sto cercando di vedere se ci sono altre opzioni valide per avere un TableView in grado di zoomare. Il mio primo tentativo è stato quello di impostare le dimensioni del carattere, quindi ho realizzato che ogni colonna e le larghezze delle righe avrebbero dovuto ridimensionarsi, il che può rallentare. Poi realizzato cambiando il carattere cambierebbe la stampa. Non sembrava una soluzione elegante. Cambiare la scala del pittore prima della verniciatura sembra la soluzione più elegante, ma dovresti re-implementare e tradurre un bel po 'di codice in Python per farlo. Mi chiedo se ci sono altri ganci per fare questo.

Grazie

+0

hai avuto alcun successo con questo, alla fine? potresti condividere la tecnica su cui ti sei stabilito? Grazie! – simon

+2

Alla fine l'attività è stata spostata in modo prioritario in modo significativo dove non ha funzionato su di esso più. A un certo punto lo rivisiterò ma non so quando. Ci sono alcune complessità e comportamenti strani con l'utilizzo della scena grafica, quindi non sono sicuro che sarà più facile che reimplementare il metodo paint alla fine – TexasRaptor

+0

Ho chiesto un paio di giorni fa, le mie abilità di ricerca sono pessime indovinate ... http: //stackoverflow.com/questions/30601123/zooming-a-view-in-pyqt. Penso che potrei finire semplicemente cambiando letteralmente la dimensione del carattere e poi ridimensionandone il contenuto, che fa schifo, ma vabbè ... – neuronet

risposta

1

Se è possibile utilizzare QTableWidget invece poi è possibile creare una QGraphicsScene e add it to that. Quindi puoi facilmente controllare la scala del widget all'interno.

Se si desidera che le intestazioni verticali e orizzontali siano sempre visibili, penso che sarà necessario disattivare le barre di scorrimento del tavolo (che verrebbero ingrandite, probabilmente non quelle che si vogliono comunque) e avere la parte di barre di scorrimento del pannello che contiene la grafica scena (probabilmente il pannello sarebbe un QAbstractScrollArea con 4 celle nel layout: una cella per la scena, una per la barra di scorrimento horiz, una per la barra di scorrimento di vert e una per l'angolo, forse vuota) e le collegherà al comportamento di scorrimento della tabella.

+0

Sembra un'idea eccellente. Ho avuto problemi nell'implementarlo poiché le barre di scorrimento sembrano essere un problema, mantenendo le intestazioni orizzontali e verticali visibili scorrendo con Vista Grafica. – TexasRaptor

+0

@TexasRaptor aggiornato. Ci vorrà del lavoro. – Schollii

0

Non esiste un metodo incorporato per lo zoom su una vista.

Il modo più semplice per separare la dimensione del carattere sullo schermo, rispetto alla dimensione del carattere salvato o stampato, è di avere fondamentalmente due tipi di carattere. Uno per essere visualizzato sullo schermo è possibile chiamare "zoom", rispetto all'altro per essere salvato/stampato e chiamare "dimensione carattere".

Nota che questa risposta è tagliato e incollato dalla stessa domanda: Zooming a view in PyQt?