Правильный способ инкапсулировать QWidgets? - PullRequest
0 голосов
/ 28 декабря 2010

Я делаю виджет Qt (назовем его A), который действительно является подклассом QGraphicsView. Однако я не хочу показывать методы QGraphicsView в своем виджете, только базовый интерфейс QWidget и некоторые из моих собственных методов. Таким образом, я хотел бы инкапсулировать экземпляр A в качестве члена простого подкласса QWidget, который мы назовем B.

Теперь мне интересно, как правильно это нарисовать? До сих пор я дал B макет, единственным элементом которого является A член. Но это выглядит как-то неправильно; например, мне нужно переопределить настройки макета по умолчанию, чтобы избежать добавления дополнительных полей и т. д. Это заставляет меня чувствовать, что есть какой-то правильный способ сделать это, которого я пропускаю. Есть мысли?

Редактировать : При настройке ответа RedX мой вопрос звучит так: Как правильно использовать gv в этой настройке? Дайте A макет и добавьте к нему gv или переопределите A методы рисования вместо использования gv? Или что-то еще?

Ответы [ 2 ]

3 голосов
/ 28 декабря 2010

Я не думаю, что есть лучший способ. Если вы не хотите использовать макет, вы можете переопределить родительский resizeEvent () следующим образом:

void A::resizeEvent( QResizeEvent* ) {
    m_graphicsView->setGeometry( QRect( 0, 0, size() ) );
} 
0 голосов
/ 28 декабря 2010

Я думаю, что вы пытаетесь это сделать?

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

Это должно представить QWidget, а внутри вы будете использовать gv, чтобы делать все, что вам нужно от QGraphicsWidget.

...