【问题标题】:QList<QString> to QString.arg()QList<QString> 到 QString.arg()
【发布时间】:2015-12-02 20:32:01
【问题描述】:

我有以下 QString:

QString funcProxy = "executeProxy(\"%1\", \"%2\", \"%3\")";

每个 on 的数据在:

QList<QString> listProxy;

如何使用 arg() 方法将 listProxy 中的数据添加到 funcProxy?

funcProxy.arg(??);

谢谢

【问题讨论】:

    标签: qt


    【解决方案1】:

    关于@owacoder 的回答,您实际上并不需要替换功能,以下应该可以正常工作:

    for (int i = 0; i < listProxy.size(); ++i) {
        funcProxy = funcProxy.arg(listProxy.at(i));
    }
    

    你问的原因:来自QString::arg()的文档

    返回此字符串的副本,用字符串替换编号最小的位置标记

    因此,它用 arg 调用中的字符串替换了最小的数字。第一次迭代包含%1、%2 和%3,所以它替换了%1。下一次迭代包含%2 和%3,因此替换了%2。

    或者,如果您可以控制 funcProxy,则可以执行以下操作,因为您可以将列表更改为 QStringList:

    QString funcProxy = "executeProxy(\"%1\")";
    QStringList listProxy{"a", "b", "c"};
    
    funcProxy = funcProxy.arg(listProxy.join("\", \""));
    

    【讨论】:

    • 第一个提供的 for 循环解决方案正在工作,干得好。只有 qWarning "QString::arg: Argument missing" 出现(这很烦人)。第二种解决方案对我不起作用,我做错了什么?见代码:QStringList args {"a", "b", "c"}; QString out("%1 - %2 - %3"); qDebug()
    【解决方案2】:

    如果您知道列表中恰好有 3 个元素,您可以这样做:

    funcProxy.arg(listProxy.at(0)).arg(listProxy.at(1)).arg(listProxy.at(2));
    

    否则,你可以使用这个:

    for (int i = 0; i < listProxy.size(); ++i)
        funcProxy.replace(QString("%%1").arg(i+1), listProxy.at(i));
    

    【讨论】:

    • 我试图避免这种情况,因为它可能超过三个。 funcProxy 每次都会不同。看来我必须循环遍历它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2020-04-30
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    相关资源
    最近更新 更多