Gerenciamento de erro

Pode haver momentos onde o seu aplicativo não funcionará conforme o esperado durante o projeto inicial, teste e implantação. Quando isto acontece, pode ser útil implementar maneiras de apresentar e diagnosticar erros.

Logs do console

Quando seu aplicativo estiver se comportando de maneiras que você não espera ou entende, poderá ser útil consultar um console para observar o que o aplicativo está fazendo internamente. O AppStudio apresenta um console embutido (consulte Capturar saída de console para mais informações), e o Qt Creator exibe as mensagens do console quando um aplicativo é executado dentro dele. As informações adicionais do console podem ser fornecidas através de uma linha de código, seja para fornecer uma propriedade que possa ser útil ou como sinal para uma função com saída complexa que pode não se comportar corretamente.

A seguinte amostra de código imprime uma linha no log do console exibindo o novo filepath quando alterou:

        TextField {
            Layout.fillWidth: true
            text: fileFolder.path
            onEditingFinished: {
                fileFolder.path = text.trim();
                console.log("New filepath:", fileFolder.path);
            }
        }

Para suporte de console mais envolvido, tanto na forma de saída em tempo real quanto e como arquivos de registro, o AppStudio AppFramework fornece um componente Registrar com uma série de funções destinadas a auxiliar e a configurar logs do console.

Para iniciar um log do console, defina a prorpriedade enabled no componente Registrar para true. Isto pode ser configurado no plano de fundo para registrar a sessão inteira, ou definido por uma chave ou botão para iniciar o registro somente quando solicitado. Quando um log é iniciado, ele se refere à propriedade outputLocation para determinar a localização e a forma onde está sendo emitido. Este destino pode ser um caminho do arquivo, neste caso, o aplicativo criará e produzirá em um arquivo de log, ou a URL de um console de syslog, neste caso, o aplicativo será exibido diretamente. A formatação das mensagens de log pode ser configurada através da propriedade messagePattern .

A propriedade messagePattern utiliza uma série de espaços reservados para estruturar as informações. Para exibir as informações desejadas nas mensagens do console, inclua os seguintes espaços reservados:

Espaço ReservadoDescrição

%{appname}

QCoreApplication::applicationName>()

%{category}

Categoria de registro

%{file}

Caminho para arquivo de origem

%{function}

Função

%{line}

Linha no arquivo de arquivo

%{message}

A mensagem real

%{pid}

QCoreApplication::applicationPid()

%{threadid}

O ID do todo o sistema do segmento atual (se puder ser obtido)

%{qthreadptr}

Um ponteiro para o QThread atual (resultado de QThread :: currentThread ()

%{type}

"depurar", "aviso", "crítico” ou "fatal"

%{time process}

Hora da mensagem, em segundos, desde o início do processo

%{time boot}

Hora da mensagem, em segundos, já que a inicialização do sistema pode ser determinada

%{time [format]}

Hora do sistema quando ocorreu a mensagem, formatada passando o formato para QDateTime :: toString ()

Adicionar mensagem de erro

Há também erros que você poderá prever e reconhecer, mas não poderá resolver. Isto pode ser devido a uma limitação inevitável do aplicativo; por exemplo, um aplicativo que exige acesso constante a um serviço online não funcionará em um ambiente sem acesso à Internet. Isto pode ser tratado exibindo uma mensagem quando o sinal onError fornecido em muitos componentes é emitido. Alguns destes componentes também fornecem propriedades adicionais para informar o usuário no caso de um erro, como a propriedade errorText NetworkRequest.

A seguinte amostra de código demonstra como apresentar uma mensagem de erro quando NetworkRequest falhar, com a mensagem de erro exibindo o erro retornado. Ela também configura a solicitação da rede para falhar, direcionando-a para fazer um pedido impossível.

MessageDialog {
    id: messageDialog
    title: "Network error"
    text: "Error code: "  + networkRequest.errorCode + "\n" + networkRequest.errorText
}
NetworkRequest {
    id: networkRequest
    url: "http://appstudio.arcgis.com/images/index/introview.jpg2"
    responseType: "json"
    onError: {
        messageDialog.open();
    }
}
Button {
    id: sendBtn
    text: "Send Request"
    onClicked: {
        networkRequest.send();
    }
}