2010-12-28 18 views
0

Ich mache ein Qt-Widget (nennen wir es A), das ist wirklich eine Unterklasse QGraphicsView. Ich möchte jedoch die QGraphicsView-Methoden in meinem Widget nicht darstellen, nur die grundlegende QWidget-Schnittstelle und einige meiner eigenen Methoden. Daher möchte ich eine Instanz von A als Mitglied einer einfachen QWidget-Unterklasse kapseln, die wir B nennen werden.Richtige Methode zum Einkapseln von QWidgets?

Jetzt frage ich mich, was ist der richtige Weg, um dies zu zeichnen? Bis jetzt habe ich B ein Layout gegeben, dessen einziger Artikel das A Mitglied ist. Aber das fühlt sich irgendwie falsch an; Zum Beispiel muss ich Standard-Layout-Einstellungen überschreiben, um zusätzliche Ränder usw. zu vermeiden. Dies führt zu dem Gefühl, dass es eine richtige Möglichkeit gibt, dies zu tun, die ich vermisse. Irgendwelche Gedanken?

bearbeiten: Bei der Einstellung von RedX‘Antwort, meine Frage ist: Was ist der richtige Weg, um Verwendunggv in dieser Einstellung? Geben Sie A ein Layout und fügen Sie gv hinzu, oder überschreiben Sie die Malmethoden von A, um stattdessen die von gv zu verwenden? Oder etwas anderes?

Antwort

3

Ich glaube nicht, dass es einen besseren Weg gibt. Wenn Sie kein Layout verwenden möchten, können Sie resizeEvent() des übergeordneten Elements wie folgt überschreiben:

void A::resizeEvent(QResizeEvent*) { 
    m_graphicsView->setGeometry(QRect(0, 0, size())); 
} 
0

Ich denke, Sie versuchen, dies zu tun?

class A : public QWidget{ 
    QGraphicsView* gv; //use this to do whatever you need 
}; 

zu tun, was Sie den gv ein als QWidget und intern aussetzen würden Sie Dies sollte von der QGraphicsWidget müssen verwenden.

+0

Ja, dies ist das Setup, wie es jetzt ist. Die Frage lautet dann: Was ist der richtige Weg, * 'gv' in dieser Einstellung zu verwenden? Geben Sie 'A' ein Layout und fügen Sie' gv' hinzu, oder überschreiben Sie 'A's Malmethoden, um stattdessen die von' gv' zu verwenden? Oder etwas anderes? – gspr

+0

Das Überschreiben der Malmethode scheint übertrieben zu sein, wenn Sie nur einige Ränder reduzieren möchten. Verwenden Sie ein Layout in 'A' und fügen Sie' gv' hinzu. Das sollte auch die Absicht klarer machen. – RedX

+0

OK, das war, was ich tun würde. Ich stimme deiner Argumentation zu. Ich wollte nur überprüfen, dass es keinen anderen Weg gibt, der als "der richtige Weg" angesehen wird. – gspr

Verwandte Themen