Obtenir la taille d'une QStringList en QML à partir d'une propriété transmise à partir de C++ backend

0

La question

C'est sûrement une question idiote mais je ne peux pas en sortir...

Existe t'il une méthode dans le QML côté pour obtenir la taille d'un QStringList passé comme une propriété à partir du c++ backend? Je peux utiliser la propriété pour remplir le modèle d'une zone de liste déroulante, mais je ne peux pas trouver un moyen direct pour obtenir la taille (bien sûr, je peux exposer un invokable méthode de la rpc, mais ce n'est pas ce que je veux)

exemple:

test.h

class Test : public Workflow
{
  Q_OBJECT
  Q_PROPERTY(QStringList availableCameras MEMBER m_availableCameras NOTIFY availableDevicesChanged)
[...]

private:
qStringList m_availableCameras

test.qml

    GroupBox{
      anchors.fill: parent
      title: "Camera Panel"
      property string selectedCamera: ""
    
      function showImage(){
        if(test.availableCameras.size() === 1) // NOT WORKING
        {
          return configurator.lastSingleImage
        }
        if(selectedCamera === test.rightCamSerialConf)
        {
          return configurator.lastRightImage
        }
        if(selectedCamera === test.leftCamSerialConf)
        {
          return configurator.lastLeftImage
        }
    
      }
      ComboBox{
                  model: test.availableCameras // WORKING
                  editable: false
                  onEditTextChanged: selectedCamera = editText
                } 
   [...]
   }
c++ qml qt
2021-11-17 09:06:16
1

La meilleure réponse

1

Un QStringList agit comme un JS tableau de chaînes de caractères en QML. En général, vous pouvez utiliser Array's des fonctions : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

Et quand vous ne le pouvez pas, vous pouvez explicitement en faire un tableau réel avec Array.from

Dans votre cas, vous voulez length:

if(test.availableCameras.length === 1)
2021-11-17 13:23:26

Parfait, merci. Juste pour info, pour moi cela a fonctionné sans les parenthèses: if(test.availableCameras.longueur === 1)
Matteo Barbieri

En effet, désolé c'est une erreur de ma part.
GrecKo

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................