Pergunta

No Qt, ambos são válidos, e se comportam da mesma:

emit someSignal(value);

vs

emit(someSignal(value));

Existe alguma diferença?

Foi útil?

Solução

Existe alguma diferença?

Não há nenhuma diferença de outros que o suporte externo, sendo desnecessário, para que os programadores preferem que, e é também o mais usado no Qt projetos lá fora.

A razão para a diferença é devido a este:

# define emit

Você pode ver a definição deste no código-fonte.

Portanto, é basicamente apenas declarou a um "vazio" cadeia de caracteres e o pré-processador irá substituir suas variantes:

someSignal(value);

ou

(someSignal(value));

Você poderia ver isso por si mesmo se, para um teste rápido, você interromper a execução do compilador após o pré-processamento é executado, por exemplo,o -E opção no caso do gcc.

Mais informações:alguém no comentário tinham dúvidas sobre a emitir palavra-chave, pois ele polui o global macro espaço de nomes.Isso é verdade, mas é uma boa maneira de garantir que não é de alguma maneira comum de fazer isso, que é uma coisa boa.

Por outro lado, isto não é obrigatório, de forma que qualquer pessoa pudesse redefinir, anule, ou até mesmo desligá-lo dizendo o Qt não usar as palavras-chave da seguinte forma:

CONFIG += no_keywords

Dessa forma, ele poderia ainda ser possível utilizar o Qt sinal-slot com mecanismo de Q_SIGNAL, Q_SIGNALS, Q_SLOT, Q_SLOTS, Q_EMIT e tudo o que.

Aqui você pode encontrar o documentação correspondente sobre Q_EMIT, por exemplo:

Q_EMIT

Utilizar esta macro para substituir a emitir palavra-chave para que emitem sinais, quando você deseja usar o Qt Sinais e Slots com uma festa de 3 signal/slot mecanismo.

A macro é normalmente usado quando no_keywords é especificado com a CONFIGURAÇÃO de variáveis .pro arquivo, mas ele pode ser usado mesmo quando no_keywords não é especificado.

Outras dicas

Não há nenhuma diferença.Na verdade, emit é definida como uma macro vazia, tão só

someSignal(value);

é também equivalente.O emit só torna a coisa mais óbvia que você está provocando um Qt sinal.

Não há absolutamente nenhuma diferença.É um vazio definição de pré-processador e, portanto, é removido antes que o compilador consegue ver o código.Tanto quanto o compilador está em causa, isso não existe mesmo.

Ele existe apenas para o benefício do programador, para que ele/ela sabe que, naquele ponto, um sinal pode, eventualmente, ser processado e pode ajudar na depuração de código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top