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

问题描述 投票:1回答:1

我有一个与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没有任何区别。

qt resize qlineedit
1个回答
0
投票

QFontMetrics没有考虑小部件的样式相关框架(这里提供3D效果的部分),这增加了它的总大小。对于一般解决方案,您将需要深入了解QStyle::PixelMetric并查询框架的其他边距,具体取决于窗口小部件类型。请注意,有时您必须将值加倍,左右和上下框架。

一个简单的解决方案,但不是可移动的样式(因此不是平台独立)是通过试验和错误找到所用样式的恒定余量,并将其添加到宽度。例:

lineEdit->setFixedWidth(fm.boundingRect(text).width() + 6);
© www.soinside.com 2019 - 2024. All rights reserved.