静态函数将不同类型的QList转换为QString

时间:2015-08-21 11:25:03

标签: c++ qt qstring qlist

我有一个包含string,int,double和date值的QList。我想将QList转换为QString并在QString返回函数内返回它。有没有我可以使用的静态功能或我在这里缺少什么?我目前的代码:

QString Product::toString()
{
    QStringList listString;
    QString outString;

    for(int i =0; i < size(); i++)
    {
        listString << at(i)->toString();
    }
    outString = listString.join("\n");
    return outString;
}

1 个答案:

答案 0 :(得分:0)

注意:

  • 我假设Product::at(int)在前一个问题的情况下返回Transaction

  • 我也假设OP意味着&#34;内置&#34;当他或她写下#34;静态&#34;

可以使用内置函数删除for。但是有些(很多?)会发现新语法不太容易理解。

QString Product::toString()
{
    QStringList aggregate;
    std::transform(m_transactions.begin(),
                   m_transactions.end(),
                   std::back_inserter(aggregate),
                   std::bind(std::mem_fn(&Transactions::toString), std::placeholders::_1));
                   // or : [](const Transaction& transaction){ return transaction.toString(); });

    return aggregate.join("\n");
}

std::transform将使用m_transactions转换每个Transaction::toString()元素,并将结果放入aggregate

std::back_inserter表示&#34;使用QStringList::push_bask记录结果&#34;。如果QStringList的{​​{1}}类似resize(int),我们可以使用QVector代替。

一元函数有点棘手,因为它需要转换为一元函数,aggregate.begin() / std::bind正在做什么。如果您使用的是C ++ 11,则可以使用lambda。

同样来自上一个问题,@ SingerOfTheFall的评论是有效的:

  

我还发现在产品中保存交易有点奇怪。一个   更好的设计是拥有一个可以存储它们的单独类。

如果您保留此设计,则应重命名std::mem_fnTransaction Product::at(int),以明确指出int Product::size()的链接,例如TransactiongetTransaction