Sistema de metaobjetos
O sistema de metaobjetos (em inglês "meta-object system") é uma parte do núcleo da framework Qt que oferece suporte a extensões do Qt para C++ como sinais/slots para comunicação inter-objetos, sistema de tipos em tempo de execução, e o sistema de propriedades dinâmicas.[1]
Arquitetura
editarO sistema de metaobjetos consiste de 3 partes: a classe QObject, a macro Q_OBJECT e uma ferramenta chamada moc (Meta-Object Compiler, ou "compilador de metaobjetos"). A QObject é a classe base para todas as classes do Qt, a macro Q_OBJECT é usada para habilitar características de metaobjeto em classes e, finalmente, o moc é um pré-processador que transforma as instâncias da macros Q_OBJECT em código fonte de C++ para ativar o mecanismo de metaobjetos do sistema na classe em que é usada.[2]
Usar o sistema de metaobjetos recebe algumas críticas. Na documentação do Qt, várias razões têm sido apresentadas para a utilização do sistema de metaobjetos, incluindo benefícios de geração de código, dinamismo de interfaces gráficas, ligação automática para linguagens de script, não adicionando limitações e também um desempenho razoável na implementação de sinais/slots com o moc.[3] Existem alguns esforços para fazer com que o Qt não necessite um pré-processador. Estes esforços incluem a re-implementação do moc do Qt usando libclang.[4]