Mi chiedo come posso avere una stringa in QML che sarà occupata con alcuni argomenti? Qualche cosa di simile in Qt:Qual è l'equivalenza per QString :: arg() in QML
QString str("%1 %2");
str = str.arg("Number").arg(12);//str = "Number 12"
Mi chiedo come posso avere una stringa in QML che sarà occupata con alcuni argomenti? Qualche cosa di simile in Qt:Qual è l'equivalenza per QString :: arg() in QML
QString str("%1 %2");
str = str.arg("Number").arg(12);//str = "Number 12"
In ambiente QML, la funzione arg() è già stata aggiunta al prototipo di stringa, quindi in pratica è possibile utilizzare string.arg() in QML proprio come C++.
C'è meno documentazione su questo, ma sono sicuro che funziona in Qt 4.7 + 1.1 QtQuick
vorranno sguardo al Qt 5 doc: http://qt-project.org/doc/qt-5.0/qtqml/qml-string.html
potrebbe essere in grado di fare questo con un plugin jQuery:
http://docs.jquery.com/Plugins/Validation/jQuery.format
import "jQuery.js" as JQuery
Page {
property string labelStub: "hello {0}"
Label {
text: JQuery.validator.format(labelStub, "world")
}
}
argomenti sono del tutto inutile in questo esempio. In JS, abbiamo semplice concatenazione di stringhe che supporta anche i numeri in mezzo, in modo da poter raggiungere questo obiettivo con un semplice
var str = 'Number' + ' ' + 12
Se si vuole veramente argomenti a stringhe non letterali, si può semplicemente sostituire il %1
con la sostituzione . QString::arg
(con un argomento) non è altro che il seguente:
function stringArg(str, arg)
{
for(var i = 1; i <= 9; ++i)
if(str.indexOf('%'+i) !== -1)
return str.replace('%'+i, arg);
return str;
}
Così il codice diventa:
var str = "%1 %2"
str = stringArg(str, "Number")
str = stringArg(str, 12)
(Si noti che questa funzione può gestire solo %1
.. %9
, mentre QString::arg
può gestire fino a %99
. Ciò richiede un po 'più di logica, dal %10
è tepato come un %1
nel mio codice.Questo non è esattamente lo stesso di QString::arg
, ma sarà sufficiente nella maggior parte dei casi.È anche possibile scrivere un stringArg
funzione che prende più argomenti sostitutivi, ma per semplicità ho appena scritto questo qui.)
C'è qualche difetto di rendimento? –