简体   繁体   English

通过Qt cpp中的像素获取QString的子字符串

[英]Get Substring of QString by Pixels in Qt cpp

I have a QString who's pixel length I can get by QFontmetrics::width() , also I can have character length from QString by QString::length() , but here I am intended to cut QString by specific amount of pixels. 我有一个可以通过QFontmetrics::width()获得像素长度的QString ,也可以通过QString::length()QString获得字符长度,但是这里我打算QString切成特定数量的像素。

Is there any way possible to have substring from QString by giving pixel size? 有没有办法通过给定像素大小从QString子字符串?

Thanks! 谢谢!

Yes, you can use QFontMetrics::elidedText to do so. 是的,您可以使用QFontMetrics::elidedText这样做。 For example, to cut at 200 pixels use: 例如,要以200像素切割,请使用:

QString cutString = yourFontMetrics.elidedText(someString, Qt::ElideNone, 200);

The second parameter indicates the cut mode (more values here ). 第二个参数指示剪切模式( 此处有更多值)。

UPDATE : I'm not sure if it is a bug in Qt (Qt 5.10.0 for me), but indeed the Qt::ElideNone returns the same string. 更新 :我不确定这是否是Qt中的一个错误(对我来说是Qt 5.10.0),但实际上Qt::ElideNone返回的字符串相同。 Here a workaround: 解决方法:

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);
}

A whole working example can be found here (you will need to add files to a new Qt project). 可以在此处找到一个完整的工作示例(您需要将文件添加到新的Qt项目中)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM