将QLineEdit的宽度调整为内容(并且比预期的更短)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将QLineEdit的宽度调整为内容(并且比预期的更短)相关的知识,希望对你有一定的参考价值。
我有一个与this问题类似的问题,但答案对我来说效果不佳。
我有一个带有一小段文本的QLineEdit元素,我希望将此元素的宽度调整为内容,以便文本适合元素,不需要额外的空格或隐藏字母。我使用QFontMetrics,但结果就好像有一点移位,所以最左边的字母部分隐藏,而右边有一些空格:
我的代码如下:
#include <QtWidgets>
int main ( int argc, char** argv) {
QApplication app (argc, argv);
QLineEdit *lineEdit = new QLineEdit;
QString text = "Hello, world!";
lineEdit->setText(text);
QFontMetrics fm = lineEdit->fontMetrics();
int w = fm.boundingRect(text).width();
// int w = fm.width(text);
lineEdit->setFixedWidth(w);
lineEdit->show();
return app.exec();
}
使用setAlignment没有任何区别。
答案
QFontMetrics
没有考虑小部件的样式相关框架(这里提供3D效果的部分),这增加了它的总大小。对于一般解决方案,您将需要深入了解QStyle::PixelMetric
并查询框架的其他边距,具体取决于窗口小部件类型。请注意,有时您必须将值加倍,左右和上下框架。
一个简单的解决方案,但不是可移动的样式(因此不是平台独立)是通过试验和错误找到所用样式的恒定余量,并将其添加到宽度。例:
lineEdit->setFixedWidth(fm.boundingRect(text).width() + 6);
以上是关于将QLineEdit的宽度调整为内容(并且比预期的更短)的主要内容,如果未能解决你的问题,请参考以下文章
使用Excel VBA调整列表框以显示比列表框宽度更长的字符串
将 LinearLayout 调整为 ImageView 的宽度
当宽度设置为 100% 时,div 的内容比 div 本身长吗? [复制]