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

标签 qt resize 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);

关于qt - 将 QLineEdit 的宽度调整为内容(并且比预期的要短),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48031291/

相关文章:

c++ - Qt 音乐流媒体

python - 如何将QLineEdit添加到QMessageBox PyQt5

c++ - Qt和C++:将QLineEdit添加到QTabWidget

php - 使用 php 调整图像大小

c++ - 从 QLineEdit 获取值

c++ - 在 Qt Eventloop 启动之前,我的代码如何接收信号

qt - QML TreeView 的可重用编辑器委托(delegate)

qt - QML:仅当鼠标进入图像时动画

c# - WPF:GridViewColumn 调整大小事件

.net - WinForms 标签页不重新绘制窗体调整大小