Reimplementar o “keyPressEvent” de forma a realizar algum tipo de tratamento às teclas pressionadas (C++\Qt)

Como o Sr. Aurélio está a ficar sem pilhas, deixo aqui o exemplo.

A pergunta era:

“Como posso associar combinações de teclas a certas operações realizadas sobre uma interface construída em C++\Qt?”

O IDE já oferece algumas funções que facilitam esta tarefa, mas um forma muito de abordagem consiste em reimplementar a função:

void QDialog::keyPressEvent(QKeyEvent * e) [virtual protected]

Exemplo:

aurelio

Neste exemplo, pressionar a tecla “A” equivale a pressionar o “botão 01” da interface.

Da mesma forma, pressionar “ALT+1” equivale a pressionar o “botão 02” da interface.

Fazer o download do exemplo

Anúncios

Carregar uma imagem a partir do disco(png) para uma base de dadosMySql utilizando Qt

Título em Inglês: Load image from disk (png) to a MySql database using Qt

Este exemplo surgiu da necessidade de exemplificar uma forma de gravar uma imagem numa base de dados.

Uma aplicação muito simples seria 0 armazenamento das fotografias dos sócios de um determinado clube!

O processo que descrevo é no entanto bem mais versátil, pois com pequenas alterações, podemos armazenar praticamente qualque tipo de ficheiro binário na base de dados. Para o efeito vamos utilizar um campo do tipo BLOB.

Disponibilizo um exemplo de aplicação: https://app.box.com/s/l8d3xdbzafuie8e56f1y

Vejam o vídeo que contém a demonstração.

 

DB03 – Exemplos de escrita de uma aplicação para Acesso a Base de Dados

Mais um exemplo, que surge na sequência dos dois anteriormente publicados:

  1. DB01
  2. DB02

Neste caso, acescento uma nova funcionalidade, que consiste na sincronização de uma QTableView com um QDataWidgetMapper, ambos ligados ao mesmo modelo (QSqlRelationalTableModel).

db03_1

db03_2

Ainda falta corrigir alguns bugs, mas aceitam-se reclamações!

Fazer o download do exemplo: db03_v1

Reimplementar um QPushButton ( reimplement a QPushButton )

A Classe QPushButton disponibiliza uma infinidade de membros que permitem controlar o aspeto e comportamento do botão.

Mesmo assim, perante tamanha fartura, podemos desejar alterar o comportamento destes Widgets.

O processo mais simples que encontrei consiste em:

  1. Criar uma classe derivada(myQPushButton) de QPushButton;
  2. Personalizar alguns aspetos relativos a estes novos botões (tamanho, … );
  3. Reimplementar os métodos virtuais ao meu gosto.

Neste exemplo, utilizei o botão no centro de uma QMainWindow, apenas para teste das suas funcionalidade.

E para testar um botão, nada melhor do que um botão. Claro!

Exemplo em vídeo:

Baixar exemplo: https://app.box.com/s/azg2gs33nxzx79jzd4gd

DB02 – Exemplos de escrita de uma aplicação para Acesso a Base de Dados

Com mais este exemplo, pretendo demonstrar alguns aspetos elementares acerca da ligação a uma base de dados MySQL utilizando a framework Qt.

Esta framework Qt disponibiliza um conjunto de classes (vistas/views) que, baseando-se na Arquitectura Modelo/Vista (Model/View Architecture), possibilitam a fácil manipulação dos dados, bem como a forma como estes são apresentados ao utilizador.

A base teórica em que assenta esta arquitectura é a MVC ( model–view–controller ), popularizada pela linguagem Smalltalk.
No caso do Qt, o papel desempenhado pelo controller é substituído por uma forma diferente de abstracção, o delegate.
A informação sobre este tipo de abordagem pode ser consultada em : http://qt-project.org/doc/qt-5.0/qtwidgets/model-view-programming.html

O exemplo DB02 consiste na utilização de uma janela principal (QMainWindow), através da qual podemos estabelecer/terminar a ligação à base de dados, bem como aceder aos dois formulários (QDialog) que, possibilitam as edição dos dados nas duas tabelas relacionadas, cujo modelo é representado na figura seguinte:

Continue reading “DB02 – Exemplos de escrita de uma aplicação para Acesso a Base de Dados”

DB01 – Exemplos de escrita de uma aplicação para Acesso a Base de Dados

db01

Com este exemplo pretendo sintetizar os aspetos mais elementares necessários à criação de uma aplicação que gere o acesso a uma base de dados.

Vou tentar resumir este assunto nos pontos seguintes, de forma a permitir que, aqueles que venham a sentir curiosidade por esta abordagem, a possam testar sem ter que atravessar um deserto de explicações complexas e por vezes contraditórias.

Vamos dividir a abordagem nos seguintes pontos:

  1. Instalar e configurar as ferramentas necessárias.
  2. Download e teste do exemplo

Continue reading “DB01 – Exemplos de escrita de uma aplicação para Acesso a Base de Dados”

Calcular a soma de dois números (Versão Qt)

Mais um exemplo muito simples.

Neste exemplo, para além dos aspetos demonstrados no Hello World![1], apenas realço o seguinte:

  • combinado com um mecanismo de herança pública[2][3], a classe Calculadora, derivada da classe QDialog, recorre a uma lista inicializadora de membros [4].
  • um desses membros, designado por ui, confinado ao espaço de nomes (namespace) Ui, dá acesso a todos os widgets que introduzimos e configuramos graficamente no ficheiro calculadora.ui (form)

Assim já será mais fácil de compreender o código relativo à função membro void on_pushButton_2_clicked(); :

void Calculadora::on_pushButton_2_clicked()
{
    int soma;
    soma = ui->valorA->text().toInt() + ui->valorB->text().toInt();
    ui->soma->setText(QString::number(soma));
}

Por exemplo …

ui->valorA->text().toInt()

… significa que:

  • ui – vou aceder a um objeto(widget) da interface gráfica(ui)
  • valorA –  é o nome que demos ao widget(QLineEdit) onde escrevemos o 1º valor a somar
  • text() – é uma função que devolve o texto (QString) contido no mesmo, ou seja, escrito pelo utilizador
  • toInt() – é apenas uma função que converte esse mesmo texto para o tipo inteiro, uma vez que pretendemos realizar o cálculo da soma

Depois de realizado o cálculo, será necessário recorrer a um processo inverso de forma a fazer aparecer o resultado da soma. Neste caso o valor inteiro é convertido para texto (QString) antes de ser escrito no local destinado ao resultado da operação.

Também podemos fazer tudo numa única linha:

void Calculadora::on_pushButton_2_clicked()
{
    ui->soma->setText(QString::number(ui->valorA->text().toInt() + ui->valorB->text().toInt()));
}

Parece simples não?

Referências:

[1] http://gracianotorrao.com/2013/12/09/hello-world/

[2] http://gracianotorrao.com/2009/02/10/tipos-de-heranca/

[3] http://gracianotorrao.com/2009/01/07/classes-derivadas-a-heranca/

[4] http://gracianotorrao.com/2009/01/07/classes-derivadas-a-heranca/

Como instalar o Qt em Windows 7

A instalação do Qt no windows resume-se a fazer o download da versão certa e a executar o instalador.

No entanto, mais cedo ou mais tarde, tornam-se necessárias algumas afinações, pelo que é conveniente ter em conta alguns aspetos que refiro aqui.

A instalação que passo a descrever é feita numa perspetiva Open Source, como deveriam ser todas as que são utilizadas no ensino (é uma opinião pessoal).

Continue reading “Como instalar o Qt em Windows 7”