2014-11-29 5 views
2

В настоящее время у меня есть QGraphicsScene, который помещается внутри QGraphicsView и отображается на дисплее. Я добавляю все свои элементы в свой scene, который я установил как активную сцену.QT Показать QWidget выше QGraphicsScene

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QGraphicsView w; 
    GameScene *gameScene = new GameScene(); // GameScene extends QGraphicsScene, adds tons of elements to the scene 
    w.setScene(gameScene); 
    w.show(); 
    return a.exec(); 
} 

Над этой сценой я хочу бар, который содержит несколько элементов макета, как несколько QProgressBar.

Для того, что я нашел до сих пор, QWidget можно легко разместить. Я сделал уже виджет, что мне нужно будет отображаться над сценой:

QWidget *dummyWidget = new QWidget(); 
QFormLayout *formLayout = new QFormLayout; 
QProgressBar *bar1 = new QProgressBar(); 
QProgressBar *bar2 = new QProgressBar(); 
bar1->setValue(20); 
bar2->setValue(100); 
formLayout->addRow("&Health:", bar1); 
formLayout->addRow("&Energy:", bar2); 
dummyWidget->setLayout(formLayout); 
dummyWidget->show(); 

Health- and energy bars

Но как я могу получить это будет отображаться над моей QGraphicsScene?

ответ

1

Если вы хотите отобразить виджет выше точки зрения вы можете иметь компоновку, аналогичную той, для dummyWidget и добавить виджет и представление в нем:

QGraphicsView w; 

    QWidget *widget = new QWidget(); 
    QFormLayout *formLayout2 = new QFormLayout(widget); 

    QWidget *dummyWidget = new QWidget(); 
    QFormLayout *formLayout = new QFormLayout; 
    QProgressBar *bar1 = new QProgressBar(); 
    QProgressBar *bar2 = new QProgressBar(); 
    bar1->setValue(20); 
    bar2->setValue(100); 
    formLayout->addRow("&Health:", bar1); 
    formLayout->addRow("&Energy:", bar2); 
    dummyWidget->setLayout(formLayout); 

    formLayout2->addRow("", dynamic_cast<QWidget*>(dummyWidget)); 
    formLayout2->addRow("", dynamic_cast<QWidget*>(&w)); 

    widget->show(); 

Если вы хотите добавить виджет в сцены, вы можете использовать QGraphicsScene::addWidget, который создает новый QGraphicsProxyWidget для виджета, добавляет его на сцену и возвращает указатель на прокси-сервер:

QGraphicsProxyWidget * item = gameScene->addWidget(dummyWidget); 
item->setPos(100,100); 
item->setZValue(1); 

вы также можете добавить его к элементу:

item->setParentItem(anOtherItem); 
+0

Хорошо работает, но есть ли способ показать его выше всей сцены, или, вернее, отобразить сцену под виджетами и расширить виджет на ширину экрана? На сцене у меня есть позиции по всей сцене, и с помощью этого метода мне пришлось бы компенсировать их высотой виджета. – jdepypere

+0

Вы хотите отобразить свой виджет внутри сцены или просто хотите, чтобы он находился над видом и вне его? – Nejat

+0

Он не должен отображаться внутри сцены, я хочу, чтобы он отображался над моей сценой. – jdepypere

Смежные вопросы