O que é a propriedade objectName: em QML, por que é necessária e como ela é diferente de id: property?

4
  1. Qual é a propriedade objectName: no QML?
  2. Quais componentes têm essa propriedade?
  3. Por que isso é necessário?
  4. Como é diferente do id: property?
  5. Por que não posso usar apenas a propriedade id: property?
por Akiva 18.10.2014 / 21:32

2 respostas

6

Esta propriedade contém o nome do objeto. O objectName é uma propriedade QString do QObject, cujo padrão é um QString vazio.

Normalmente, você define essa propriedade quando precisa encontrar elementos QML do Qt. Desta forma, os sinais, propriedades e funções de um elemento QML podem ser acessados a partir do código Qt (C ++).

Os testes de piloto automático usam essa propriedade para analisar seu aplicativo.

Em Interagindo com Objetos QML do C ++ :

Os componentes QML são essencialmente árvores de objeto com filhos que têm irmãos e seus próprios filhos. Objetos filho de componentes QML podem ser localizados usando a propriedade QObject :: objectName com QObject :: findChild () . Por exemplo, se o item raiz em MyItem.qml tiver um item Rectangle filho:

import QtQuick 2.0

Item {
    width: 100; height: 100

    Rectangle {
        anchors.fill: parent
        objectName: "rect"
    }
}

A criança pode ser localizada assim:

QObject *rect = object->findChild<QObject*>("rect");
if (rect)
    rect->setProperty("color", "red");

Observe que um objeto pode ter vários filhos com o mesmo objectName. Por exemplo, ListView cria várias instâncias de seu delegado, portanto, se seu delegado é declarado com um objectName específico, o ListView terá vários filhos com o mesmo objectName. Neste caso, o QObject :: findChildren () pode ser usado para encontrar todas as crianças com um objectName correspondente.

  

Aviso : Embora seja possível usar o C ++ para acessar e manipular o QML   objetos profundamente na árvore de objetos, recomendamos que você não   esta abordagem fora do teste de aplicativos e prototipagem. 1   força da integração QML e C ++ é a capacidade de implementar o   Interface de usuário QML separadamente da lógica C ++ e do backend de conjunto de dados,   e essa estratégia é quebrada se o lado do C ++ atingir profundamente o QML   componentes para manipulá-los diretamente. Isso dificultaria   para, por exemplo, trocar um componente de visualização QML por outra visualização, se   novo componente estava faltando um objectName necessário. É melhor para o   Implementação de C ++ para saber o mínimo possível sobre o usuário do QML   implementação de interface e a composição da árvore de objetos QML.

Se um objectName for necessário para o teste, isso definitivamente vale a pena . objectName’s obviamente não devem ser adicionados quando não forem necessários. Ao adicioná-los, as diretrizes gerais de QML para desempenho devem ser seguidas.

Fonte: Qual é o impacto na memória de adicionar objectNames a itens QML?

    
por Sylvain Pineau 19.10.2014 / 17:51
2

1: é usado para pesquisar objetos pelo nome

2: Todos eles, vem do QObject

3: é usado pelo piloto automático para analisar seu aplicativo em casos de teste

4: não tenho certeza

5: Eu não acho que o id seja descoberto por ferramentas externas (como o piloto automático)

    
por mhall119 19.10.2014 / 04:00