Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 获取QLabel中文本的(X,Y)位置_Qt_Qlabel - Fatal编程技术网

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

Qt 获取QLabel中文本的(X,Y)位置,qt,qlabel,Qt,Qlabel,如何获取QLabel中文本的起始位置。 例: 如何在不重写paintEvent的情况下获取QLabel中显示的文本的左上角(仅限)。 我没有权限覆盖paintEvent或使用QLineEdit等其他小部件 我可以使用fontmetrics获得宽度/高度,但要获得文本的X,Y?可以使用以下代码: QFontMetrics fm(ui->label->font()); int textWide = fm.horizontalAdvance(ui->label->text())

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

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

可以使用以下代码:

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();
QFontMetrics-fm(ui->label->font());
int textWide=fm.horizontalpadvance(用户界面->标签->文本());
int textHeight=fm.height();
int textX,textY;
如果((ui->label->alignment()&Qt::AlignLeft)=Qt::AlignLeft)
textX=ui->label->x();
如果((ui->label->alignment()&Qt::AlignHCenter)==Qt::AlignHCenter)
textX=ui->label->x()+(ui->label->width()-textWide)/2;
如果((ui->label->alignment()&Qt::AlignRight)==Qt::AlignRight)
textX=ui->label->x()+ui->label->width()-textWide;
如果((ui->label->alignment()&Qt::AlignTop)==Qt::AlignTop)
textY=ui->label->y();
如果((ui->label->alignment()&Qt::AlignVCenter)==Qt::AlignVCenter)
textY=ui->label->y()+(ui->label->height()-textHeight)/2;
如果((ui->label->alignment()&Qt::AlignBottom)==Qt::AlignBottom)
textY=ui->label->y()+ui->label->height()-textHeight;
qDebug()y();

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