Aplicar lógica de negócio aos dados informados pelo usuário é uma etapa importante no desenvolvimento de plugins QGIS. No entanto, um plugin útil faz muito mais do que simplesmente ler os valores inseridos em uma janela de diálogo. Ele valida dados, aplica regras e toma decisões com base nas escolhas do usuário.
Neste artigo, vamos aprender como adicionar lógica de negócio a um plugin QGIS. Veremos como validar dados inseridos pelo usuário, exibir mensagens úteis e controlar o comportamento do plugin de acordo com regras predefinidas.
Este tutorial é destinado a iniciantes que já sabem criar uma janela de diálogo e recuperar valores informados pelo usuário, e que agora desejam tornar seus plugins mais inteligentes e confiáveis.
Dos dados informados pelo usuário à lógica de negócio
Nos artigos anteriores — Desenvolver um Plugin QGIS: Por Que e Como Criar um Plugin, Desenvolver um Plugin QGIS: Criando um Plugin com o Plugin Builder e Desenvolver um Plugin QGIS: Adicionar um Botão e uma Janela — aprendemos a criar um plugin, adicionar uma interface de usuário e recuperar valores informados pelo usuário.
Nesta etapa, o plugin consegue coletar informações, mas ainda não sabe se essas informações fazem sentido.
É aqui que entra a lógica de negócio.
A lógica de negócio é simplesmente um conjunto de regras que determina como o plugin deve se comportar.
Por exemplo:
- Uma distância de buffer deve ser maior que zero.
- Uma porcentagem deve estar entre 0 e 100.
- Um campo obrigatório não pode ficar vazio.
- Uma opção avançada deve estar disponível apenas em determinadas condições.
Sem essas regras, um plugin se torna frágil e sujeito a erros.
Por que um botão não faz nada sozinho
Antes de continuar, é importante compreender um conceito fundamental:
Uma janela de diálogo Qt não executa nenhuma ação por conta própria.
Seu papel é apenas:
- exibir campos de entrada (caixas de texto, listas suspensas, caixas de seleção etc.),
- permitir que o usuário informe ou selecione valores,
- apresentar informações por meio de uma interface gráfica.
Se o plugin não ler explicitamente esses valores e não os utilizar em código Python, nada acontecerá — e isso é perfeitamente normal.
A janela de diálogo é apenas uma interface de usuário. O comportamento real do plugin é definido pelo código que você escreve.
Onde os valores são armazenados?
Cada widget exibido na janela é um objeto Python criado a partir do arquivo .ui.
Alguns exemplos comuns:
QLineEdit→ campo de textoQComboBox→ lista suspensaQCheckBox→ caixa de seleçãoQSpinBox→ campo numérico
Esses widgets podem ser acessados através do objeto de diálogo (dlg).
Por exemplo:
self.dlg.lineEdit
self.dlg.comboBox
self.dlg.checkBox
O valor informado pelo usuário é armazenado dentro do próprio widget.
Seu plugin deve recuperar explicitamente esse valor antes de poder utilizá-lo.
Por exemplo:
name = self.dlg.lineEdit.text()
Essa linha lê o conteúdo de um campo de texto e o armazena na variável name.
A partir desse momento, o plugin pode aplicar regras de validação, realizar cálculos ou executar algoritmos de processamento.
Lendo valores: exemplos simples
Depois de entender onde os valores são armazenados, o próximo passo é recuperá-los a partir dos widgets da janela.
Cada tipo de widget possui seu próprio método para acessar os dados informados pelo usuário.
Campo de texto (QLineEdit)
text = self.dlg.lineEdit.text()
textcontém o texto digitado pelo usuário.
Lista suspensa (QComboBox)
choice = self.dlg.comboBox.currentText()
choicecontém o item atualmente selecionado.
Caixa de seleção (QCheckBox)
enabled = self.dlg.checkBox.isChecked()
enabledcontém o valorTrueouFalse.
Campo numérico (QSpinBox)
value = self.dlg.spinBox.value()
valuecontém um valor numérico.
O momento crucial: quando ler os valores
Um erro muito comum entre iniciantes é tentar ler os valores antes que o usuário tenha confirmado a janela de diálogo.
Em um plugin QGIS típico, os valores devem ser recuperados somente depois que a janela for aceita pelo usuário.
Por exemplo:
result = self.dlg.exec_()
if result:
# ler os valores aqui
A chamada de exec_() exibe a janela de diálogo e aguarda a interação do usuário.
Se você tentar ler os valores antes da execução de exec_(), normalmente estará lendo campos vazios ou valores padrão.
O usuário deve primeiro preencher a janela e clicar em OK para que o plugin possa acessar os dados informados de forma confiável.
Validando os dados informados pelo usuário
Imagine um plugin que solicita ao usuário uma distância de buffer.
Antes de utilizar esse valor, o plugin deve verificar se ele é válido.
distance = float(self.dlg.lineEditDistance.text())
if distance <= 0:
QMessageBox.warning(
self.dlg,
“Distância inválida”,
“Informe um valor maior que zero.”
)
return
Neste exemplo:
- o valor informado pelo usuário é convertido para um número;
- o plugin verifica se o valor é positivo;
- uma mensagem de aviso é exibida caso o valor seja inválido;
- o processamento é interrompido imediatamente.
Essa simples verificação evita muitos erros desnecessários.
Tratando campos vazios
Um dos erros mais frequentes dos usuários é deixar um campo obrigatório em branco.
Por exemplo:
name = self.dlg.lineEditName.text()
if not name:
QMessageBox.warning(
self.dlg,
“Informação ausente”,
“Informe um nome para o projeto.”
)
return
Em vez de falhar mais tarde, o plugin informa imediatamente qual informação está faltando.
Isso melhora significativamente a experiência do usuário.
Verificar a presença de valores obrigatórios é uma das maneiras mais simples de aumentar a confiabilidade de um plugin.
Entradas diferentes, ações diferentes
A lógica de negócio não se limita à validação de dados.
Ela também pode determinar qual ação deve ser executada.
Imagine uma lista suspensa contendo dois modos de processamento:
Modo de processamento
- Padrão
- Avançado
O plugin pode executar códigos diferentes dependendo da opção selecionada.
mode = self.dlg.comboBoxMode.currentText()
if mode == “Padrão”:
self.run_standard_processing()
else:
self.run_advanced_processing()
Assim, a mesma interface pode levar a fluxos de trabalho completamente diferentes.
Combinando várias regras
Os plugins utilizados em situações reais raramente se baseiam em uma única condição.
Na maioria das vezes, várias verificações são combinadas antes do início do processamento.
if distance > 0 and percentage <= 100:
self.process_data()
else:
QMessageBox.warning(
self.dlg,
“Parâmetros inválidos”,
“Revise os valores informados.”
)
O plugin verifica se todas as condições foram atendidas antes de continuar.
Essa abordagem torna as ferramentas mais robustas e previsíveis.
Fornecendo mensagens úteis ao usuário
Os usuários apreciam plugins que explicam claramente o que está acontecendo.
Sempre que possível, exiba mensagens claras e compreensíveis.
Por exemplo:
QMessageBox.information(
self.dlg,
“Processamento concluído”,
“A análise foi concluída com sucesso.”
)
Ou:
QMessageBox.warning(
self.dlg,
“Entrada inválida”,
“A distância de buffer deve ser maior que zero.”
)
Uma boa mensagem deve:
- explicar o problema;
- indicar como corrigi-lo;
- evitar termos técnicos desnecessários.
Muitas vezes, uma mensagem clara e útil vale mais do que uma longa mensagem de erro difícil de interpretar.
Lógica de negócio não significa código complexo
Muitos iniciantes acreditam que lógica de negócio exige programação avançada.
Na realidade, a maioria das regras de negócio se resume a uma série de perguntas simples:
- O valor informado é válido?
- O campo está vazio?
- Qual opção foi selecionada?
- O processamento deve continuar?
A maioria dos plugins úteis é construída a partir de muitas pequenas decisões, e não de algoritmos sofisticados.
Uma boa lógica de negócio costuma ser mais valiosa do que um código complexo.
Testando suas regras
Sempre que adicionar regras de validação, teste diferentes situações:
- valores válidos;
- valores inválidos;
- campos vazios;
- entradas inesperadas.
Um plugin deve se comportar corretamente mesmo quando os usuários cometem erros.
Os testes ajudam a identificar pontos fracos antes que seus usuários os encontrem.
Erros comuns de iniciantes
Nesta etapa, os iniciantes costumam:
- confiar excessivamente nos dados informados pelo usuário;
- esquecer de verificar campos vazios;
- exibir mensagens de erro pouco claras;
- continuar o processamento apesar de valores inválidos.
Esses erros são normais e se tornam mais fáceis de evitar com a prática.
O que você aprendeu
Ao final deste artigo, você compreende:
- o que é lógica de negócio;
- por que a validação dos dados é importante;
- como exibir mensagens úteis ao usuário;
- como executar ações diferentes de acordo com as escolhas feitas pelo usuário.
Seu plugin não está mais apenas coletando informações: ele está começando a tomar decisões.
E no próximo artigo?
No próximo artigo veremos como:
- trabalhar com a camada ativa;
- acessar as feições selecionadas;
- processar apenas as feições selecionadas.
É neste momento que o plugin começa a interagir diretamente com os dados geográficos e se torna realmente útil.