我在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
和label
中字体大小不同时也可以使用
答案 0 :(得分:6)
不幸的是,它可能是不可能的,至少没有开箱即用,右边距将不起作用,因为即使文本明显向左偏移,它始终为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
之外别无选择,仔细检查其绘制事件,确定偏移量的计算位置,并将该值存储在公共成员中所以可以从外面访问它来用来抵消标签。
我个人对这段代码很幸运:
答案 1 :(得分:4)
您是否可以使用QLineEdit
和QLabel
来使用两个QLineEdits?
请考虑以下事项:
QWidget* widget = new QWidget();
// Original line edit
QLineEdit *lineEdit1 = new QLineEdit("999");
lineEdit1->setFixedWidth(100);
lineEdit1->setAlignment(Qt::AlignRight);
lineEdit1->setStyleSheet("border-width: 2px;");
// A suggestion if you want a label
QLabel *label = new QLabel("999");
label->setFixedWidth(100);
label->setAlignment(Qt::AlignRight);
label->setStyleSheet("border: 2px solid rgba(255, 0, 0, 0%)");
// Alternatively if you can use another QLineEdit
QLineEdit *lineEdit2 = new QLineEdit("999");
lineEdit2->setFixedWidth(100);
lineEdit2->setAlignment(Qt::AlignRight);
lineEdit2->setReadOnly(true);
lineEdit2->setStyleSheet("background: rgba(0, 0, 0, 0%); "
"border-width: 2px; "
"border-style: solid; "
"border-color: rgba(0, 0, 0, 0%);");
// Bring it all together
QLayout *layout = new QVBoxLayout(widget);
layout->addWidget(lineEdit1);
layout->addWidget(label);
layout->addWidget(lineEdit2);
widget->show();
它强制所有边界为2px,因此在不同的平台上它应该是相同的。第二个QLineEdit
看起来不应该与QLabel
看起来不同(文本颜色看起来比标签颜色稍暗,这可能是一件好事,因为它与原始编辑相匹配)
使用QLineEdit
代替QLabel
的额外好处是价值现在可以选择......
免责声明:我只在Linux上进行了测试,但我没有进行像素级别比较。
编辑:我看到对齐失败,字体大小不同。