【问题标题】:How to pass `std::string` to `QString` `arg` method?如何将`std::string`传递给`QString``arg`方法?
【发布时间】:2013-04-12 21:44:41
【问题描述】:
class StringResourceTable
{
private:
    StringResourceTable();

public:
    static StringResourceTable& instance();

    void configure(const QString& path);
    QString message(const QString& id) const;

    template <typename T1>
    QString message(const QString& id, T1 a1) const
    {
        return message(id).arg(a1);
    }

    template <typename T1, typename T2>
    QString message(const QString& id, T1 a1, T2 a2) const
    {
        return message(id).arg(a1).arg(a2);
    }

    template <typename T1, typename T2, typename T3>
    QString message(const QString& id, T1 a1, T2 a2, T3 a3) const
    {
        return message(id).arg(a1).arg(a2).arg(a3);
    }

private:
    QString m_path;
    QMap<QString, QString> m_map;
}

此代码使用arg 方法如果QString 类替换%1, %2, ... 通过一些参数。参数可以是 int、char*、double 和 QString 支持的任何参数,但不是 std::string。将std::string 传递给任何message 函数会非常方便。我不能将它们专门用于std::string,因为它的顺序没有定义。可能是第一,第二,...

我认为它应该是一个模板结构,它将使用其.c_str() 方法将std::string 转换为QString。谁能帮忙写一下?

【问题讨论】:

  • 令人讨厌的是 QString::arg() 对 std::string 和 std::wstring 没有重载。

标签: c++ qt templates


【解决方案1】:

fromStdString 函数怎么样?

但是,你可以使用类似的东西

template<typename T>
const T& convert(const T& v)
{
   return v;
}

QString convert(const std::string& s)
{
   return QString::fromStdString(s);
}

并使用类似

return message(id).arg(convert(a1));

【讨论】:

  • 但是例如在传递 int 时它应该如何工作。它也应该是适用于其他类型的模板
猜你喜欢
  • 2011-08-28
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 2011-05-11
  • 2011-04-18
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
相关资源
最近更新 更多