如何使QLineEdit跟随光标向我显示其坐标

时间:2014-08-20 12:27:36

标签: c++ qt qlineedit qcursor

我希望我的QWidget向我显示光标在图像上的坐标,我读到最好的方法是使用QLineEdit,但我没有找到如何使用它这样做。如何启动QLineEdit以及如何显示它,以便它跟随光标? PS:我知道如何在它上面设置点坐标。 这就是我在做的方式:

void QImageWidget::mouseMoveEvent( QMouseEvent *event ){
   int x = event->pos( ).x();
   int y = event->pos( ).y();
   if( cursorLineEdit != NULL && cursorLineEdit->isEnabled( ) )
       cursorLineEdit->setText( QString( "[ %1 , %2 ]" ).arg( x ).arg( y ) );
}

mouseTracking已经设置为true:

this->setMouseTracking(true);

谢谢!

编辑:cursorLineEdit是我要显示的QLineEdit,我需要在我的QWidget构造函数上初始化它,但我不知道怎么做!

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

QImageWidget::QImageWidget()
{
    [..]
    cursorLineEdit = new QLineEdit(this);
    QVBoxLayout layout = new QVBoxLayout(this);
    layout->addWidget(cursorLineEdit);
    setMouseTracking(true);
    [..]
}

void QImageWidget::mouseMoveEvent( QMouseEvent *event )
{
   int x = event->pos().x();
   int y = event->pos().y();
   if (cursorLineEdit->isEnabled())
       cursorLineEdit->setText(QString( "[ %1 , %2 ]" ).arg( x ).arg( y ) );
}

编辑:

另一种方法是显示带坐标的工具提示:

void QImageWidget::mouseMoveEvent(QMouseEvent *event)
{
    const QPoint &p = event->pos();
    QToolTip::showText(mapToGlobal(p),
                       QString("[%1 , %2]").arg(p.x()).arg(p.y()), this,
                       QRect(p, QSize(20, 20)));
}

答案 1 :(得分:1)

我找到了另一个解决方案,但首先我想告诉你,为什么我决定在这里发布我的答案。我认为我的解决方案不高效并且非常加载CPU,但是当我运行vahancho的代码时,我看到QToolTip也加载了CPU(在我的计算机上,两个解决方案都可以将CPU从0加载到3%)所以现在我认为我可以在这里发布答案,你可以决定你想要使用什么。

想法:获取位置,创建透明像素图,在此像素图坐标上绘制,将此像素图设置为光标。而且,我们将使用一个bool变量(我们不会在每个mouseMoveEvent中绘制pixmap,我们将每隔一次绘制它(为了效率))

bool showMustGoOn;//in header

showMustGoOn = false;//in constructor

void QImageWidget::mouseMoveEvent(QMouseEvent *event)
{
    if(showMustGoOn)
    {
    const QPoint &p = event->pos();
    QPixmap px(50,10);
    px.fill(Qt::transparent);
    QPainter paint(&px);
    paint.drawText(10,10,QString("%1,%2").arg(p.x()).arg(p.y()));
    setCursor(QCursor(px));
    showMustGoOn = false;
    }
    else
    {
        showMustGoOn = true;
    }
}

如果你想使用它,你可以画另一个来显示光标。另一个优点是pixmap是透明的,所以这个光标不会关闭另一个区域(你只看到数字,所有另一个是透明的,但工具提示关闭)

最后,在Qwt中有类似的东西,我认为它更有效,但在Qwt的源代码中搜索所需的代码可能会很长并且复杂。

enter image description here