如何使 QLineEdit 跟随光标向我显示它的坐标
Posted
技术标签:
【中文标题】如何使 QLineEdit 跟随光标向我显示它的坐标【英文标题】:How to make a QLineEdit follow the cursor to show me its coordinates 【发布时间】:2014-08-20 12:27:35 【问题描述】:我希望我的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 构造函数上初始化它,但我不知道如何!
【问题讨论】:
什么实际上不起作用?什么是cursorLineEdit
,它是如何声明、创建和初始化的?
您需要在小部件上激活mouse tracking
它已经激活了,我只是不知道如何启动QLineEdit,他的父母会是什么??以及如何展示它!
cursorLineEdit是QLineEdit,是我的QImageWidget(QWidget)的一个属性,不知道怎么初始化
【参考方案1】:
您可以执行以下操作:
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)));
【讨论】:
感谢您的回答,它显示的是 QLineEdit,但这不是我真正要求的,因为我实际上需要在光标附近显示它(并且它必须跟随它) @user3883676,我认为 QLineEdit 不是正确的选择。我建议改用工具提示。 你可能是对的,我实际上看到了这个:***.com/questions/12417636/qt-show-mouse-position-like-tooltip 那个问的人说他使用了 QLineEdit 等更好,这就是我来问的原因,但我会尝试一个工具提示,谢谢! @user3883676,我已经用实现工具提示版本的示例代码修改了我的答案。【参考方案2】:我找到了另一种解决方案,但首先我想告诉你,为什么我决定在这里发布我的答案。我认为我的解决方案效率不高而且非常负载 CPU,但是当我运行 vahancho 的代码时,我看到 QToolTip 也加载了 CPU(在我的计算机上,两种解决方案都可以将 CPU 从 0% 加载到 3%)所以现在我认为我可以在这里发布答案你可以决定你想使用什么。
想法:获取位置,创建透明像素图,在此像素图坐标上绘制,将此像素图设置为光标。此外,我们将使用一个 bool 变量(我们不会在每次 mouseMoveEvent 时都绘制像素图,而是每隔一次绘制一次(为了效率))
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;
如果你想使用它,你可以画另一个东西来显示光标。另一个优点是像素图是透明的,所以这个光标不会关闭另一个区域(你看到的只是数字,其他都是透明的,但工具提示关闭)
最后,在 Qwt 中也有类似的东西,我认为它更有效,但是在 Qwt 的源代码中搜索所需的代码可能会很长而且很复杂。
【讨论】:
以上是关于如何使 QLineEdit 跟随光标向我显示它的坐标的主要内容,如果未能解决你的问题,请参考以下文章
如何使 QPushButtons 将文本添加到 QLineEdit 框中?