我有一个与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);