Qgraphicsscene烦恼得到函数内部scenePos()(Qgraphicsscene tr

2019-09-26 15:01发布

我有一个子类和qgraphicsscene试图获得一个“正常”的函数内部的鼠标COORDS。 我只得到它的工作的“鼠标参与”的功能。 对不起,我的业余程序员。

对于exmample这里scenePos()的工作原理:

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()给“怪异”的位置:

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);
}

我在几个月寻找了很多,但无法找到解决的办法,......也许我做了错误的做法,或其中有一些更容易possibilitie获得这种类型的函数中的鼠标COORDS?

谢谢! :-)

Answer 1:

如果你想获得关于光标现场,你必须首先获得的QGraphicsView光标下面的位置(QGraphicsScene可以的QGraphicsView的一部分),为此,我们必须重复和验证它是否是视域里面,然后计算出相对于使用的QGraphicsView的mapToScene方法场景中的位置:

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);
    }
}


文章来源: Qgraphicsscene troubles to get scenePos() inside a function