gpt4 book ai didi

c++ - 如何获取QGraphicsWidget的位置坐标?

转载 作者:行者123 更新时间:2023-11-28 04:35:09 25 4
gpt4 key购买 nike

我在 QGraphicsWidget 中有一个可移动的标签,它位于 QGraphicsScene 中,就像这样

QLabel *SelectLabel = new QLabel("Select This");

QGraphicsWidget* ParentWidget = new QGraphicsWidget();
ParentWidget->setFlags (QGraphicsItem::ItemIsMovable);

GraphicsScene->addItem(ParentWidget);


QGraphicsProxyWidget *proxy = MainScene->addWidget(SelectLabel);
proxy->setParentItem(ParentWidget);

这允许我在 QGraphicsArea 内自由移动(按住鼠标左键并拖动)标签。但是,我需要一种方法来准确了解标签/QGraphicsWidget 的移动时间和位置。搜索后我找到了 QGraphicsItem::ItemPositionChange 标志并尝试在 ->setFlag() 中设置它并像这样应用插槽:

connect(ParentWidget, SIGNAL(moveEvent(QGraphicsSceneMoveEvent*)),
this, SLOT(labelPositionChange()));

但是我得到了错误:

QObject::connect: No such signal 
QGraphicsWidget::moveEvent(QGraphicsSceneMoveEvent*)

那么,有人可以告诉我如何为我的 QGraphicsWidget 获取移动事件吗?谢谢。

最佳答案

moveEvent 不是信号。它是一个事件处理程序,旨在在派生类中重新实现。唉,有你想要的信号:QGraphicsObject::xChangedQGraphicsObject::yChanged

在下面的完整示例中,文本项用于显示位置。设置场景对齐方式和矩形,以便场景不会相对于 View 移动,因此文本在 View 中保持固定。

screenshot

// https://github.com/KubaO/stackoverflown/tree/master/questions/graphics-widget-move-signals-51680570
#include <QtWidgets>

int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setAlignment(Qt::AlignLeft | Qt::AlignTop);
scene.setSceneRect(0, 0, 1, 1);

QGraphicsWidget parent;
parent.setPos(150, 100);
QLabel label("Select This");
label.setContentsMargins(10, 10, 10, 10);
auto *proxy = scene.addWidget(&label);
proxy->setParentItem(&parent);
parent.setFlags(QGraphicsItem::ItemIsMovable);
scene.addItem(&parent);

QGraphicsTextItem text;
scene.addItem(&text);
auto const updateText = [&] {
text.setPlainText(QString("%1, %2").arg(parent.x()).arg(parent.y()));
};
QObject::connect(&parent, &QGraphicsObject::xChanged, &text, updateText);
QObject::connect(&parent, &QGraphicsObject::yChanged, &text, updateText);
updateText();

view.setMinimumSize(320, 320);
view.show();
return a.exec();
}

关于c++ - 如何获取QGraphicsWidget的位置坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51680570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com