我将qgraphicsscene子类化,并试图在“正常”函数中获取鼠标坐标。我只能在“涉及鼠标”功能上使用它。抱歉,我是业余程序员。
例如,这里的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);
}
几个月来,我进行了很多搜索,但找不到解决方案,... 也许我做错了方法,或者是否有一些更简单的方法可以将鼠标坐标插入此类函数中?
谢谢! :-)
答案 0 :(得分:0)
如果要获取相对于光标场景的位置,则必须首先获取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);
}
}