QT 在 QGraphicsScene 上方显示一个 QWidget
Posted
技术标签:
【中文标题】QT 在 QGraphicsScene 上方显示一个 QWidget【英文标题】:QT Display a QWidget above QGraphicsScene 【发布时间】:2014-11-29 11:33:16 【问题描述】:目前我有一个 QGraphicsScene
放在 QGraphicsView
内并显示在显示屏上。我将所有元素添加到我设置为活动场景的scene
。
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();
但是如何让这个显示在我的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);
【讨论】:
工作得很好,但是还有一种方法可以真正将其显示在整个场景之上,或者更确切地说,将场景显示在小部件下并将小部件扩展到屏幕的宽度?场景我在整个场景中放置了项目,使用这种方法我必须将它们全部偏移小部件的高度。 您想在场景中显示您的小部件,还是只是希望它位于视图上方和外部? 它不必显示在场景中,我希望它显示在我的场景上方。 @arbitter 有很多方法可以做到这一点。您可以使用布局并在其中添加小部件和视图。我已经更新了答案以显示一种可能的方式。以上是关于QT 在 QGraphicsScene 上方显示一个 QWidget的主要内容,如果未能解决你的问题,请参考以下文章
Qt:选择的项目出现在 QGraphicsScene 的顶部
如何在 QGraphicsScene 中缩放图像? (Qt 5.11)
Qt5中show()后QGraphicsView/QGraphicsScene初始定位的基本问题
QGraphicsView与QGraphicsScene Qt窗体的消息传递