将QLineEdit的宽度调整为内容(并且比预期的更短)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将QLineEdit的宽度调整为内容(并且比预期的更短)相关的知识,希望对你有一定的参考价值。

我有一个与this问题类似的问题,但答案对我来说效果不佳。

我有一个带有一小段文本的QLineEdit元素,我希望将此元素的宽度调整为内容,以便文本适合元素,不需要额外的空格或隐藏字母。我使用QFontMetrics,但结果就好像有一点移位,所以最左边的字母部分隐藏,而右边有一些空格:

QLineEdit too short

我的代码如下:

#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 本身长吗? [复制]

获取浏览器视口的宽度和高度,无论内容大小如何且不调整为 100%?

布局约束将图像大小调整为屏幕宽度保持纵横比

如何将pickerColumn 的宽度调整为pickerColumns 内的文本?