首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >inside在函数内获取scenePos()的场景问题

inside在函数内获取scenePos()的场景问题
EN

Stack Overflow用户
提问于 2019-03-18 13:36:57
回答 1查看 242关注 0票数 1

我已经将一个qgraphicsscene场景子类化,并尝试在一个“正常”函数中获得鼠标坐标。我只让它在“涉及鼠标”的功能上工作。对不起,我是个业余程序员。

对于这里的示例,scenePos()起作用:

代码语言:javascript
运行
复制
void mousePressEvent(QGraphicsSceneMouseEvent *event)
  {
// qDebug() << "Custom scene clicked.";
   if(event->modifiers() == Qt::ControlModifier) {
        if(event->button() == Qt::LeftButton) {
            QPointF pos = {event->scenePos().x(), 70};
            addChordnueve(pos); // crea 1 item at mouse x e y = 70
//        } if(event->modifiers() == Qt::ControlModifier & event->modifiers() == Qt::ShiftModifier) {
   qDebug() << "Control!!!";}}

这里它根本不起作用,但是得到了QCursor::pos(),给出了“奇怪”的位置:

代码语言:javascript
运行
复制
void preaddExtChord()
{
    auto *hellos = scenePos(); //<- It doesn't works

    int xplace = QCursor::pos().x()-620;
    int yplace = QCursor::pos().y()-380;

    QGraphicsSimpleTextItem *item = new QGraphicsSimpleTextItem("n");
    item->setFont(QFont ("omheads", 20));
    item->setPos(xplace, yplace);
    addItem(item);
}

几个月来我找了很多,但找不到解决方案,...也许我做的是一个错误的方法,或者是有一些更容易的可能性在这种类型的函数中获得鼠标坐标?

谢谢!:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-18 13:57:32

如果要获得相对于光标场景的位置,必须首先获得QGraphicsView位于光标下方( QGraphicsScene可以是QGraphicsView的一部分),为此,我们必须迭代并验证它是否在视口内,然后使用QGraphicsView的mapToScene方法计算相对于场景的位置:

代码语言:javascript
运行
复制
QPoint p = QCursor::pos();
for(QGraphicsView *view: views()){
    QWidget *viewport = view->viewport();
    QRect vr = viewport->rect();
    QPoint vp = viewport->mapFromGlobal(p);
    if(vr.contains(vp)){
        QPointF sp = view->mapToScene(vp);
        QGraphicsSimpleTextItem *item = new QGraphicsSimpleTextItem("n");
        item->setFont(QFont("omheads", 20));
        item->setPos(sp);
        addItem(item);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55215093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档