获取 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) 位置的主要内容,如果未能解决你的问题,请参考以下文章
如何获取标签和 NumericUpDown 中文本基线的位置?
jQuery获取textarea光标/插入符号X,Y位置并在下面显示一个DIV