在Qt cpp中按像素获取QString的子串
Get Substring of QString by Pixels in Qt cpp
我有一个 QString
的像素长度,我可以通过 QFontmetrics::width()
获得,我也可以通过 QString::length()
获得 QString
的字符长度,但我打算在这里按特定数量的像素剪切 QString
。
有没有办法通过给定像素大小从 QString
中获得子字符串?
谢谢!
是的,您可以使用 QFontMetrics::elidedText
这样做。例如,要以 200 像素剪切,请使用:
QString cutString = yourFontMetrics.elidedText(someString, Qt::ElideNone, 200);
第二个参数表示cut模式(更多值here)。
更新:我不确定这是否是 Qt 中的错误(对我来说是 Qt 5.10.0),但确实 Qt::ElideNone
returns 相同的字符串。这里有一个解决方法:
QString cutString(const QString& str, const QFontMetrics& fm, int pixels)
{
const QChar ellipsis(0x2026);
if (fm.width(str) <= pixels) return str;
auto tmpStr = fm.elidedText(str, Qt::ElideRight, pixels + fm.width(ellipsis));
return tmpStr.left(tmpStr.length() - 1);
}
可以找到完整的工作示例here(您需要将文件添加到新的 Qt 项目)。
我有一个 QString
的像素长度,我可以通过 QFontmetrics::width()
获得,我也可以通过 QString::length()
获得 QString
的字符长度,但我打算在这里按特定数量的像素剪切 QString
。
有没有办法通过给定像素大小从 QString
中获得子字符串?
谢谢!
是的,您可以使用 QFontMetrics::elidedText
这样做。例如,要以 200 像素剪切,请使用:
QString cutString = yourFontMetrics.elidedText(someString, Qt::ElideNone, 200);
第二个参数表示cut模式(更多值here)。
更新:我不确定这是否是 Qt 中的错误(对我来说是 Qt 5.10.0),但确实 Qt::ElideNone
returns 相同的字符串。这里有一个解决方法:
QString cutString(const QString& str, const QFontMetrics& fm, int pixels)
{
const QChar ellipsis(0x2026);
if (fm.width(str) <= pixels) return str;
auto tmpStr = fm.elidedText(str, Qt::ElideRight, pixels + fm.width(ellipsis));
return tmpStr.left(tmpStr.length() - 1);
}
可以找到完整的工作示例here(您需要将文件添加到新的 Qt 项目)。