将QWidgets放置在指定的坐标?

时间:2015-07-09 15:43:22

标签: c++ css qt graphics

上下文:我在C ++ / Qt中制作Risk(流行的棋盘游戏),我遇到了一个问题。我决定通过在每个国家/地区放置按钮来使地图互动,然后可以点击该按钮。经过一些实验,我将QGraphicsPixmapItem子类化为按钮,并将它们放在QGraphicsScene和QGraphicsView中。我已经通过CSS制作了世界地图背景图像,因此可以轻松覆盖按钮。

我的问题:我想将这些按钮放在特定坐标。 (如果重要的话,那些坐标将是绝对的。)到目前为止我所做的所有接口,我已经完成了代码 - 我不熟悉Qt Designer,所以我正在寻找一个函数函数集,它允许我将我的按钮(或多或少)放在我想要的位置。

我尝试了什么:我查看了文档,但找不到让我控制项目放置位置的功能,只是以各种方式组织项目的功能 - 列,水平盒子,垂直盒子等 当我之前设计QWidgets时,我是通过在QLayouts中放置按钮,其他小部件等来完成的,但似乎没有允许我控制的布局。 QGridLayout是我能看到的唯一一个类似的东西,到目前为止的实验并没有按照我想要的方式进行 - 按钮不会靠近地图的边缘,无论如何我添加了许多列或行。

最简单的解决方案是放弃并将按钮放在地图旁边,当然,这是最后的解决方案。

提前致谢。

编辑:为清晰起见,添加了示例源代码。

QHBoxLayout* layout = new QHBoxLayout;
TerritoryButton* test = new TerritoryButton(QPixmap("img.png"));
TerritoryButton* test2 = new TerritoryButton(QPixmap("img.png"));
QGraphicsScene* scene = new QGraphicsScene;
QGraphicsScene* scene2 = new QGraphicsScene;
scene->addItem(test);
scene2->addItem(test2);
QGraphicsView* view = new QGraphicsView(scene);
QGraphicsView* view2 = new QGraphicsView(scene2);

layout->addWidget(view);
layout->addWidget(view2);
setLayout(layout);
setFixedSize(1000, 512);

1 个答案:

答案 0 :(得分:0)

QGraphicsPixmapItem继承QGraphicsItem,因此您可以调用setPos(x, y)(在使用addItem将pixmap项插入到场景中之后)。

  

void QGraphicsItem::setPos(const QPointF &pos)
  将项目的位置设置为pos,即父坐标。对于   没有父级的项目,pos位于场景坐标中。

     

项目的位置描述了父坐标中的原点(局部坐标(0,0))。