获取 QLabel 中文本的 (X,Y) 位置

Posted

技术标签:

【中文标题】获取 QLabel 中文本的 (X,Y) 位置【英文标题】:Get (X,Y) position of the Text in QLabel 【发布时间】:2021-05-15 02:58:33 【问题描述】:

如何获取 QLabel 中文本的起始位置。 例如:

如何在不覆盖paintEvent 的情况下获得显示在QLabel 中的文本的左上位置(仅限)。 我无权覆盖 paintEvent 或使用 QLineEdit 等其他小部件 我可以使用 fontmetrics 获取宽度/高度,但要获取文本的 X、Y?

【问题讨论】:

如前所述,这看起来像是一个 xy 问题(不是双关语)。我可以问你为什么想要文本左上角的坐标吗?你打算如何使用它? 谢谢@G.M. ,我的意图是绘制一个与绘制文本大小相同的外部小部件,并将其放在文本对齐的标签顶部。 【参考方案1】:

您可以使用以下代码:

QFontMetrics fm(ui->label->font());
int textWide = fm.horizontalAdvance(ui->label->text());
int textHeight = fm.height();
int textX , textY;
if ((ui->label->alignment() & Qt::AlignLeft) == Qt::AlignLeft)
    textX = ui->label->x();
if ((ui->label->alignment() & Qt::AlignHCenter) == Qt::AlignHCenter)
    textX = ui->label->x() + ( ui->label->width() - textWide) / 2;
if ((ui->label->alignment() & Qt::AlignRight) == Qt::AlignRight)
    textX = ui->label->x() + ui->label->width() - textWide ;

if ((ui->label->alignment() & Qt::AlignTop) == Qt::AlignTop)
    textY = ui->label->y();
if ((ui->label->alignment() & Qt::AlignVCenter) == Qt::AlignVCenter)
    textY = ui->label->y() + ( ui->label->height() - textHeight) / 2;
if ((ui->label->alignment() & Qt::AlignBottom) == Qt::AlignBottom)
    textY = ui->label->y() + ui->label->height() - textHeight;

qDebug() << textX << textY << ui->label->x() << ui->label->y();

【讨论】:

以上是关于获取 QLabel 中文本的 (X,Y) 位置的主要内容,如果未能解决你的问题,请参考以下文章

js获取鼠标距离

如何获取标签和 NumericUpDown 中文本基线的位置?

jQuery获取textarea光标/插入符号X,Y位置并在下面显示一个DIV

在AngularJS中获取图像位置(x;y)

如何在 UIImageView 中获取 UIImage 的 x 和 y 位置?

文本区域中的光标位置(字符索引,不是 x/y 坐标)