qt - ¿Cuál es la equivalencia para QString:: arg() en QML?
(4)
En el entorno QML, la función arg () ya está agregada al prototipo de cadena, por lo que básicamente puede usar string.arg () en QML como C ++.
Hay menos documentación sobre esto, pero estoy seguro de que funciona en Qt 4.7 + QtQuick 1.1
Eche un vistazo al documento de Qt 5: http://qt-project.org/doc/qt-5.0/qtqml/qml-string.html
Me pregunto ¿Cómo puedo tener una cadena en QML que se ocupará con algunos argumentos? Algo así en Qt:
QString str("%1 %2");
str = str.arg("Number").arg(12);//str = "Number 12"
Es posible que puedas hacer esto con un complemento de 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")
}
}
Los argumentos son totalmente innecesarios en este ejemplo. En JS, tenemos una concatenación de cadenas simple que también admite números intermedios, por lo que puede lograr esto con un simple
var str = ''Number'' + '' '' + 12
Si realmente quiere argumentos en cadenas no literales, simplemente puede reemplazar el %1
con el reemplazo. QString::arg
(con un argumento) no es más que lo siguiente:
function stringArg(str, arg)
{
for(var i = 1; i <= 9; ++i)
if(str.indexOf(''%''+i) !== -1)
return str.replace(''%''+i, arg);
return str;
}
Entonces tu código se convierte en:
var str = "%1 %2"
str = stringArg(str, "Number")
str = stringArg(str, 12)
(Tenga en cuenta que esta función solo puede manejar %1
.. %9
, mientras que QString::arg
puede manejar hasta %99
Esto requiere un poco más de lógica, ya que %10
está incluido como %1
en mi código. Así que esto es no es exactamente lo mismo que QString::arg
, pero será suficiente en la mayoría de los casos. También puede escribir una función stringArg
tomando múltiples argumentos de reemplazo, pero por la simplicidad que acabo de escribir esta aquí.)
Solo usa :
"foo%1".arg("bar");