我有一个QLabel
就在下面一个QLineEdit
具有相同的尺寸和对齐属性:
QLineEdit *lineEdit = new QLineEdit("999");
lineEdit->setFixedWidth(100);
lineEdit->setAlignment(Qt::AlignRight);
//
QLabel *label = new QLabel("999");
label->setFixedWidth(100);
label->setAlignment(Qt::AlignRight);
//
QLayout *layout = new QVBoxLayout;
layout->addWidget(lineEdit);
layout->addWidget(label);
下面是它的渲染方式:
我怎样才能有底部的文字label
与文本完全右对齐lineEdit
?
全奖如果您找到适用于所有平台的解决方案,并且在字体大小不同的情况下也适用lineEdit
and label
.
不幸的是,这可能是不可能的,至少不是开箱即用的,右边距将不起作用,因为即使文本明显向左偏移,它也始终为 0。原因是这个偏移量不是由边距决定的,而是取决于平台 GUI 样式和正在使用的特定字体度量的组合,并且它的值“方便地”在类公共接口中不可用,没有办法去实现它。
您可以轻松获取字体规格,但无法获取QStyleOptionFrame
由于所需的方法是受保护的,访问它需要子类化QLineEdit
。但是,如果幸运的话,该值很可能为零,因此您可以采用如下简单的方法:
QVBoxLayout *layout = new QVBoxLayout;
QLineEdit *lineEdit = new QLineEdit("999");
lineEdit->setAlignment(Qt::AlignRight);
QLabel *label = new QLabel("999");
label->setAlignment(Qt::AlignRight);
int offsetValue = lineEdit->fontMetrics().averageCharWidth();
label->setIndent(offsetValue);
setLayout(layout);
layout->addWidget(lineEdit);
layout->addWidget(label);
如果这对你来说不能正常工作,你将别无选择,只能子类化QLineEdit
,仔细检查其绘制事件,确定计算偏移量的位置,并将该值存储在公共成员中,以便可以从外部访问它以用于偏移标签。
我个人对这段代码很幸运:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)