打印时限制 QStringList 的长度
Limit the length of QStringList when printing
本文关键字:QStringList 打印 更新时间:2023-10-16
我想通过使用QStringList时通过仅打印前五个字符串来限制消息的长度。
这是我的实现:
// QStringList missing is already filled with random strings
QString warning = "Missing: ";
// Limit the warning up to the fifth element
for ( int i = 0; i < missing.size(); ++i ) {
if ( i <= 4 ) {
warning += ", %1".arg( missing.at(i) );
} else {
warning += ", ...";
break;
}
}
有没有更有效的方法可以做到这一点?
在Hauron的指导下,我发现这可能是最有效的方法:
if ( !missing.empty() ) {
auto noOfPrintStr = 5;
QString warning = tr( "Missing: %1" )
.arg( missing.mid( 0, noOfPrintStr-1 ).join( ", " ) );
if ( missing.size() > noOfPrintStr )
warning += ", ...";
// print the warning
}
编写一个帮助程序:
QString joinWithLimit(size_t lenLimit, const QStringList &strings, const QString &separator = ", ")
{
QString result;
result.reserve(lenLimit); // to reduce number of allocations
result += strings.front();
for (int i = 1; i < strings.size(); ++i)
{
const auto &s = strings[i];
if (result.length() + separator.length() + s.length() > lenLimit) {
return result;
}
result += separator;
result += s;
}
return result;
}
如果您需要性能,则不建议使用 arg
(它需要做额外的解析格式字符串的工作,并且您不控制分配)。
尝试使用 QStringList::join(...)
(http://doc.qt.io/qt-5/qstringlist.html#join)。
由于您只想合并最多前 5 个元素,为了避免复制列表,请使用迭代器,即:
QString foo(const QStringList& myList)
{
auto iterBegin = myList.begin();
auto iterEnd = iterBegin + std::min(myList.size(), 5);
return QStringList{iterBegin, iterEnd}.join(", ");
}
。但它不起作用,因为QStringList
没有这样的构造函数。您必须将QStrings
复制到新QStringList
中。理想情况下,副本将是浅的 - 缓冲区在两个不同QStringLists
的两个QStrings
之间共享,但我不确定 Qt 是否这样做(它可能会,并且仅在您尝试更改底层字符串时才提供单独的缓冲区)。
无论哪种方式,一旦您将QStringList
作为子列表,只需调用:
subList.join(", ");
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 使用QProcess执行命令,并将结果存储在QStringList中
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在gem5中打印文件中的所有cache_blocks
- 打印时限制 QStringList 的长度
- 全局声明QStringlist变量,使用QFileDialog获取位置路径并将其打印到lineEdit并在QProces