Para utilizar senhas em um campo de edição na linguagem de programação C++ você deve usar o componente LineEdit com sua propriedade echoMode alterada para Password, deste modo o controle altera a visualização dos caracteres comuns para caracteres “*”.

E para exibir um resultado ou mensagem para o usuário você pode utilizar a classe QMessageBox, está fornece uma caixa de diálogo modal para informar o usuário ou para fazer ao utilizador uma pergunta e receber uma resposta.

Campo de senha e Caixa de Menssagem

Campo de senha e Caixa de Menssagem

Qt Creator Design

1 – Crie um projeto no Qt e adicione na tela um Label, um LineEdit e um PushButton, alinhe e mude as propriedades de texto dos widgets como na figura abaixo.

Design

Design

Altere a propriedade do LineEdit chamada echoMode para Password e utilize o código abaixo para completar seu código gerado automaticamente, atente-se que declaramos um método para verificação da senha na definição da classe no arquivo .h e o utilizamos na implementação da classe no arquivo .cpp.

Exemplo:

Neste exemplo criamos um método para verificar a senha no qual o usuário entrará através de uma caixa de edição, será verificado primeiro o tamanho da senha e logo após o conteúdo da senha, visto que este método não pode ser utilizado em um programa funcional, limita-se apenas para o aprendizado de como utilizar mascaras de senha no widget LineEdit e não como trabalhar com senhas em nível profissional.

Para a versão deste programa para C++ Windows MFC: clique aqui.

C++

Classe – arquivo .h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;

    // Cria metodo de verificação de senha
    bool verificaSenha(QString senha);
};

#endif // MAINWINDOW_H

Classe – arquivo .cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

bool MainWindow::verificaSenha(QString senha)
{
    // campo para validar função
    bool correto = true;

    // recupera senha de alguma fonte (apenas teste)
    QString recSenha = "daaberto";

    if ((senha.length() != recSenha.length()) || (senha != recSenha))
    {
        correto = false;
    }

    return correto;
}

void MainWindow::on_pushButton_clicked()
{
    // Verifica senha e exibe resultado

   if (verificaSenha(ui->lineEdit->text()))
   {
       QMessageBox::information(this, tr("Sucesso"),tr("\nSenha verificada com sucesso!\n"));
   }
   else
   {
       QMessageBox::information(this, tr("Erro"),tr("\nSenha invalida, tente outra vez!\n"));
   }
}

Qt – Context Menu – C++ – Linux

Publicado: 5 de outubro de 2014 em C/C++

Um menu de contexto ou um menu pop-up é um menu em uma interface gráfica do usuário (GUI) que aparece em cima de interação do usuário, como uma operação de clique com o botão direito do mouse. Um menu de contexto oferece um conjunto limitado de opções que estão disponíveis no estado atual, ou contexto, do sistema operacional ou aplicativo. Normalmente, as opções disponíveis são as ações relacionadas com o objeto selecionado.

Os menus de contexto foram introduzidos no ambiente Smalltalk do computador Xerox Alto, onde eram chamados menus pop-up. O sistema operacional NEXTSTEP desenvolveu a ideia, incorporando a funcionalidade em que o botão do meio ou o da direita traziam o menu principal na posição do mouse, eliminando a necessidade de mover o ponteiro por toda a tela. Esse menu principal era vertical e mudava de acordo com o texto da operação do sistema.

Menu de Contexto ou Popup Menu

Menu de Contexto ou Popup Menu

Qt Creator – Design

Um menu de contexto em Qt necessita de três elementos básicos são eles: signals, slots e actions, para criar um menu de contexto siga os seguintes passos.

1 – Crie um novo projeto C++ Qt com Widgets e arraste para o formulário, dois componentes Labels e um componente ListWidget e mude suas propriedades de texto e alinhe os Widgets como na figura abaixo:

Qt - Creator - Design

Qt – Creator – Design

2 – Clique no componente ListWidget e mude sua propriedade contextMenuPolicy para CustomContextMenu, agora na aba Signals/Slots Editor adicione um novo Signal para o componente ListWidget com o sinal customContextMenuRequest(QPoint), logo após clique novamente no componente ListWidget e crie um novo Slot para o método customContextMenuRequest(QPoint), utilize a imagem abaixo para referencia:

Signals/Slots

Signals/Slots

3 – Vamos agora criar a ação para o item do menu que acabamos de criar, para isto clique na aba Action Editor e crie uma nova ação e um novo slot para a ação para executar o método chamado triggered():

Action - Menu

Action – Menu

4 – Utilize o código abaixo para completar o código gerado automaticamente e rode o programa.

Exemplo:

Neste exemplo criamos um Signal e um Slot para o componente ListWiget no qual receberá um menu de contexto e também criamos uma ação para que seja executado a opção desejada do menu.

Para a versão deste programa para C++ Windows MFC: clique aqui.

C++

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    // Inicializa lista de opções
    // Adiciona Musicas do album Ten (Pearl Jam)
    QString  musicas[] = {"Once",  "Even Flow", "Alive", "Why Go", "Black",
                         "Jeremy", "Oceans", "Porch", "Garden", "Deep",
                         "Release"};
    for (int i = 0; i < 11; i++)
    {
        ui->listWidget->addItem(musicas[i]);
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}


// Declara Slot para exibir menu de contexto
void MainWindow::on_listWidget_customContextMenuRequested(const QPoint &pos)
{
    QMenu contextMenu(tr("Context menu"), this);

    // Adiciona ação ao menu de contexto
    contextMenu.addAction(ui->actionEscolher_est_M_sica);

    // Cria mais itens sem ações (estetica)
    contextMenu.addAction(new QAction(tr("Item 1"), this));
    contextMenu.addAction(new QAction(tr("Item 2"), this));
    contextMenu.addAction(new QAction(tr("Item 3"), this));
    contextMenu.exec(mapToGlobal(pos));

}

// Declara slot para a ação do item do menu
void MainWindow::on_actionEscolher_est_M_sica_triggered()
{
   ui->label_2->setText("Você clicou na opção: " + ui->listWidget->currentItem()->text());
}

 

 

Qt – Menu – C++ – Linux

Publicado: 4 de outubro de 2014 em C/C++

Em computação um menu é uma lista de opções ou comandos apresentados a um operador por um computador. Os menus são, por vezes, hierarquicamente organizado, permitindo uma navegação através de diferentes níveis da estrutura do menu.  A seleção de um item do menu com uma seta irá expandi-lo, mostrando um segundo menu (o sub menu) com opções relacionadas com a entrada selecionada. É possível adicionar outros componentes ao menu como ícones de imagem, um componente de botões de radio e até mesmos botões de cheque. O menu em alguns sistemas operacionais são localizados na barra de titulo/tarefas no topo do sistema e não no próprio aplicativo.

Qt - Menu

Qt – Menu

Qt Creator – Design

1 – Crie um novo projeto de Widget do Qt, você pode perceber que os componentes Menu, Barra de tarefas e a barra de status já são criados por padrão. Neste primeiro momento vamos utilizar apenas o Widget menu. Você pode clicar diretamente no item do menu e criar os menus digitando os nomes da opções que você precisa, use a figura abaixo para o design do seu menu:

Criando Menu

Criando Menu

2 – Coloque dois Labels no formulário e mude suas propriedades de texto como na imagem do programa logo acima . Para criar os Slots para os eventos de clique do menu você precisa utilizar a aba Action Editor que esta localizada abaixo da área de edição do seu formulário. Clique em cada ação e com o botão direito do mouse escolha a opção Go to Slot:

Menu Actions - Slots

Menu Actions – Slots

Utilize o código abaixo para preencher o código gerado automaticamente e clique em RUN para rodar o programa.

Exemplo:

Neste exemplo criamos o menu em Design Time e criamos um Slot para cada ação do menu, as ações serão responsáveis por nos dizer qual menu foi clicado utilizando um componente Label no centro do formulário.

Para a versão deste programa para C++ Windows MFC: clique aqui.

C++

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_actionMenu_1_triggered()
{
   ui->label_2->setText("Você clicou no: Menu opção 1");
}

void MainWindow::on_actionMenu_2_triggered()
{
   ui->label_2->setText("Você clicou no: Menu opção 2");
}

void MainWindow::on_actionMenu3_triggered()
{
    ui->label_2->setText("Você clicou no: Menu opção 3 Sub Menu opção 1");
}
void MainWindow::on_actionMenu_4_triggered()
{
    ui->label_2->setText("Você clicou no: Menu opção 4");
}

 

Qt – Horizontal Slider – C++ – Linux

Publicado: 4 de outubro de 2014 em C/C++

Um Slider é um controle deslizante, também conhecido como Track Bar, é um objeto de interface gráfica (GUI) com o qual o usuário pode definir um valor movendo um indicador, geralmente de uma forma horizontal. Em alguns casos, o usuário também pode clicar em um ponto no controle deslizante para alterar a configuração.

Horizontal Slider - Programa

Horizontal Slider – Programa

Qt Creator – Design

Crie um novo projeto C++ utilizando Widgets e arraste para o formulário três componentes Labels, um componente Horizontal Slider e um PushButton, crie um Slot de mudança de valor para o Slider, um Slot de clique para o PushButton. Use a figura abaixo para a criação do design:

Design

Design

Exemplo:

Neste exemplo criamos um programa que exibe o valor de um Slider em um controle Label através do evento de mudança de valor do Slider e também do clique de um botão.

Para a versão deste programa para C++ Windows MFC: clique aqui.

C++

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_horizontalSlider_valueChanged(int value)
{
    ui->label_2->setText("Valor do Slider: " + QString::number(ui->horizontalSlider->value()));
}

void MainWindow::on_pushButton_clicked()
{
    ui->label_3->setText("Clique no botão para selecionar um valor: " +
                          QString::number(ui->horizontalSlider->value()));
}

Qt – SpinBox- C++ – Linux

Publicado: 4 de outubro de 2014 em C/C++

SpinBox

É um controle de rotação, onde os usuários podem clicar em botões de seta para alterar gradualmente o valor dentro de sua caixa de texto numérico . A caixa de rotação refere-se à combinação de uma caixa de texto e seu controle de rotação associado. O SpinBox possui uma faixa de configuração de valore limite permitindo que o usuário escolha valores entre o mínimo e o máximo definido pelo desenvolvedor.

SpinBox - Programa

SpinBox – Programa

Qt Creator – Design

Crie um novo programa C++ utilizando Widgets e arraste para a tela três Labels, um LineEdit, um SpinBox e um PushButton. Crie o Slot para o evento de clique do botão e utilize o código abaixo para completar o código gerado automaticamente. Use a figura abaixo para auxiliar o design do formulário:

Qt -Design

Qt -Design

Exemplo:

Neste exemplo usamos um SpinBox e o associamos a um LineEdit Control e inicializamos o SpinBox, parametrizando um valor mínimo e um valor máximo para o controle.

Para a versão deste programa C++ Windows MFC: clique aqui.

C#

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // Inicializa valores limite para o SpinBox
    ui->spinBox->setRange(1,10);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    // captura e exibe texto do SpinBox
     ui->lineEdit->setText(ui->spinBox->text());
}

ComboBox

Em computação, uma caixa de combinação é um elemento de interface gráfica. Um ComboBox permite ao usuário escolher uma das várias opções, pode ter duas formas muito diferentes. A forma padrão é a caixa de combinação não editável, que conta com um botão e uma lista suspensa de valores. A segunda forma, chamada de caixa de combinação editável, possui um campo de texto com um pequeno botão confinando-o. O usuário pode digitar um valor no campo de texto ou clique no botão para exibir uma lista drop-down.

Listwidget

Em computação, uma caixa de listagem é um elemento de interface gráfica. Uma ListBox apresenta ao usuário um grupo de itens, exibidos em uma ou mais colunas. As listas podem ter muitos itens, por isso eles são muitas vezes colocados em painéis de rolagem.

ComboBox - ListWidget - Programa

ComboBox – ListWidget – Programa

Qt Creator

Para criar um programa como este você precisa aprender alguns pequenos detalhes da interface gráfica e algumas das peculiaridades dos widgets do framework Qt, então siga os seguintes passos:

1 – Crie um novo projeto de Widgets. Arraste para o formulário um componente GroupBox e o redimensione para que caiba todos os outros componentes dentro dele. Você pode notar que o componente está sem as bordas, isto se deve ao fato de que os widgets do Qt são customizáveis e possuem a propriedade StyleSheet para que você possa declarar as modificações que deseja na aparência de cada componente. Abra a propriedade StyleSheet e na janela subsequente e coloque o código como na imagem abaixo:

Qt - StyleSheet

Qt – StyleSheet

Sobre Qt StyleSheets: http://qt-project.org/doc/qt-4.8/stylesheet.html

2 – Arraste para a tela 3 widgets Label, um ListWidget e um combobox, mude suas propriedades de texto e os alinhe conforme a figura abaixo:

Qt Creator - Design

Qt Creator – Design

3 –  Após terminar o design crie os Slots de duplo clique para o ListWidget e o de mudança de item para o ComboBox, utilize o código abaixo para completar o seu código gerado automaticamente, visto que utilizamos o construtor da classe para inicializar uma Array com os dados que utilizaremos para os componentes. Clique em Run para rodar o programa.

Para a versão deste programa C++ Windows MFC: clique aqui.

Exemplo:

Neste exemplo usamos um ComboBox e um ListBox para criar um programa C++ e utilizamos os slots para os eventos de cada Widget para interligar suas ações.

C++

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // Inicializa formulario

    // Cria Array
    QString  itens[] = { "Satisfaction", "Paint it Black", "Wild Horses", "Brown Sugar",
                         "Sympathy for the Devil", "Start Me Up" };

    // Alimenta ListBox e Combobox
    for (int i=0; i < 6; i++)
    {
        ui->listWidget->addItem(itens[i]);
        ui->comboBox->addItem(itens[i]);
    }

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_listWidget_doubleClicked(const QModelIndex &index)
{
    // Alimenta texto e Sincroniza combo
    ui->label->setText("Rolling Stones: " + ui->listWidget->currentItem()->text());
    ui->comboBox->setCurrentIndex(ui->listWidget->currentIndex().row());
}

void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1)
{
     // Alimenta texto e Sincroniza lista
     ui->label->setText("Rolling Stones: " + ui->comboBox->currentText());
     ui->listWidget->setCurrentRow(ui->comboBox->currentIndex());
}

Qt – RadioButton – isChecked – C++ – Linux

Publicado: 2 de outubro de 2014 em C/C++

RadioButton

Em computação, um botão de opção ou botão de rádio (Radiobutton) é um elemento de interface gráfica (isto é um componente widget) com dois estados: selecionado (ativado) e não-selecionado (desativado), quando o usuário pressiona um botão do mouse ou uma tecla como espaço. Botões de opção são usados num grupo para apresentar um conjunto limitado de escolhas (duas ou mais) que são mutuamente exclusivas. Deste maneira, quando o usuário seleciona um outro botão no mesmo conjunto, o outro botão já selecionado torna-se automaticamente desativado.

isChecked

É uma função que retorna um valor equivalente ao Checked (marcado) em linguagens de alto nível.

Programa - C++

Programa – C++

Qt Creator – Design

Escolha um novo projeto Qt Widget Application e adicione ao formulário um 3 Labels, 4 Radiobuttons, 2 LineEdits, 1 TextEdit e um botão. Mude as propriedades de cada componente de acordo com sua preferencia, crie um Slot para cada evento de clique de cada respectivo Widget. Use a imagem abaixo para referencia do design.

Qt Creator - Design

Qt Creator – Design

Exemplo:

Neste exemplo criamos um grupo de botões de radio que efetua as 4 operações básicas da matemática, usando o evento de item e a verificação do seu estado, neste primeiro exemplo você pode ver que utilizamos as conversões de valores básicas entre os tipos para efetuar os cálculos do programa.

Para a versão deste programa C++ Windows MFC: clique aqui.

C++

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

// Slots para os cliques dos botões de radio
void MainWindow::on_radioButton_clicked()
{
    // Verifica estado do botão de radio
    if (ui->radioButton->isChecked())
    {
        ui->textEdit->insertPlainText("Soma:\n");
    }
}

void MainWindow::on_radioButton_2_clicked()
{
    if (ui->radioButton_2->isChecked())
    {
        ui->textEdit->insertPlainText("Subtração:\n");
    }
}

void MainWindow::on_radioButton_3_clicked()
{
    if (ui->radioButton_3->isChecked())
    {
        ui->textEdit->insertPlainText("Multiplicação:\n");
    }
}

void MainWindow::on_radioButton_4_clicked()
{
    if (ui->radioButton_4->isChecked())
    {
        ui->textEdit->insertPlainText("Divisão:\n");
    }
}

// Slot de clique do botão
void MainWindow::on_pushButton_clicked()
{
    // O calculo poderia ser efetuado em uma unica linha de instruções
    // ṕorem para ficar mais facil de ler preferimos desmenbra-lo
    // você pode modificar o calculo deixando o programa menor
    
    
    // Variavel para o calculo
    double valor;

    if (ui->radioButton->isChecked())
    {
        // Efetua o calculo
        valor = ui->lineEdit->text().toDouble() + ui->lineEdit_2->text().toDouble();
        ui->textEdit->insertPlainText(ui->lineEdit->text() + " + " + ui->lineEdit_2->text() +
                                      " = " +QString::number(valor)+"\n"); // Converte valores
    }

    if (ui->radioButton_2->isChecked())
    {
        valor = ui->lineEdit->text().toDouble() - ui->lineEdit_2->text().toDouble();
        ui->textEdit->insertPlainText(ui->lineEdit->text() + " - " + ui->lineEdit_2->text() +
                                      " = " +QString::number(valor)+"\n");
    }

    if (ui->radioButton_3->isChecked())
    {
        valor = ui->lineEdit->text().toDouble() * ui->lineEdit_2->text().toDouble();
        ui->textEdit->insertPlainText(ui->lineEdit->text() + " * " + ui->lineEdit_2->text() +
                                      " = " +QString::number(valor)+"\n");
    }

    if (ui->radioButton_4->isChecked())
    {
        valor = ui->lineEdit->text().toDouble() / ui->lineEdit_2->text().toDouble();
        ui->textEdit->insertPlainText(ui->lineEdit->text() + " / " + ui->lineEdit_2->text() +
                                      " = " +QString::number(valor)+"\n");
    }
}

Qt – Signals e Slots – C++ – Linux

Publicado: 1 de outubro de 2014 em C/C++

Signals e slots são usados ​​para comunicação entre objetos, este é um recurso exclusivo do Qt e é uma das principais diferenças entre o Qt e outros frameworks. Um Signal (sinal) é emitido quando ocorre um evento em particular e um Slot é uma função que é chamada em resposta a um sinal, outros toolkits utilizam um call-back e uma função para executar este procedimento.

Existe dois modos de criar Signals/Slots, o primeiro é utilizando os recursos do Qt Design conectando os Widgets simplesmente arrastando um componente dentro do outro e escolhendo suas respectivas ações para os sinais e o Slot, deste modo nenhum código C++ será gerado e a conexão estará declarada dentro do arquivo .ui do formulário a outra maneira é por código fonte, declarando os sinais e os slots em suas respectivas classes.

Signals e Slots: http://qt-project.org/doc/qt-4.8/signalsandslots.html

Criando Sinais e Slots em Design Time

Vamos criar primeiramente os sinais e slots em Design Time para que você aprenda mais sobre a IDE visual do Qt Creator, visto que sempre criaremos sinais e slots em todos os programas daqui para frente:

1 – Crie uma nova aplicação de Widgets no Qt Creator e arraste para a tela um componente Label, um componente Horizontal Slider e um componente Progress Bar, mude a propriedade de texto do rotulo como desejar e alinhe os componentes Slider e Pogress Bar através da barra de ferramentas na opção Lay Out Vertically. Quando você alinha os componentes você pode perceber que eles estão de um novo componente chamado VerticallyLayout, este novo componente é responsável pelo alinhamento e você pode aumenta-lo ou diminui-lo e todos os widgets dentro dele serão afetados.

Widgets - Alinhamento

Widgets – Alinhamento

2 – Na barra de ferramentas clique no segundo botão chamado Edit Signals/Slot e em seguida arraste o Slider para dentro do Progress Bar, uma nova janela aparecera para que você escolha as propriedades de cada widget. Para o Slider escolha o sinal ValueChanged(int) e para a barra de progresso escolha o slot chamado setValue(int), em seguida clique em OK.

Editando Signals/Slot

Editando Signal/Slot

3 – Agora vamos analisar o resultado da nossa edição, você pode ver que no formulário os componentes estão conectados entre si por sinais e por slots. Isto significa que o Horizontal Slider declarou um sinal com o conteúdo de mudança de valor e o Progress Bar declarou um slot para sua propriedade valor, sendo assim tanto o sinal quanto o slot são valores inteiros e toda vez que o Slider sofrer uma mudança de valor o sinal enviará o valor para o slot que por sua vez mudara a propriedade de valor da barra de progresso, sincronizando os dois valores, veja a imagem abaixo para entender o Signal e Slot criados logo abaixo do formulário:

Signal e Slots

Signal e Slots

4 – Rode o programa e mova o Slider como desejar:

Programa - Eventos - Slider e Progress Bar

Programa – Eventos – Slider e Progress Bar

Exemplo:

Neste exemplo criamos um Signal e um Slot em Design Time para conectarmos dois componentes, visto que quando utilizamos o Design Time nenhum código C++ é necessário, o sinal e o slot criados residem dentro do código XML do formulário dentro da tag connections como você pode ver no código abaixo.

XML

Este código é gerado automaticamente e não precisa ser utilizado:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>438</width>
    <height>332</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Desenvolvimento Aberto</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>6</x>
      <y>20</y>
      <width>431</width>
      <height>20</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <weight>75</weight>
      <bold>true</bold>
     </font>
    </property>
    <property name="layoutDirection">
     <enum>Qt::RightToLeft</enum>
    </property>
    <property name="text">
     <string>Signals e Slots</string>
    </property>
    <property name="alignment">
     <set>Qt::AlignCenter</set>
    </property>
   </widget>
   <widget class="QWidget" name="layoutWidget">
    <property name="geometry">
     <rect>
      <x>30</x>
      <y>120</y>
      <width>381</width>
      <height>62</height>
     </rect>
    </property>
    <layout class="QVBoxLayout" name="verticalLayout">
     <item>
      <widget class="QSlider" name="horizontalSlider">
       <property name="orientation">
        <enum>Qt::Horizontal</enum>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QProgressBar" name="progressBar">
       <property name="value">
        <number>24</number>
       </property>
      </widget>
     </item>
    </layout>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>438</width>
     <height>25</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections>
  <connection>
   <sender>horizontalSlider</sender>
   <signal>valueChanged(int)</signal>
   <receiver>progressBar</receiver>
   <slot>setValue(int)</slot>
   <hints>
    <hint type="sourcelabel">
     <x>207</x>
     <y>173</y>
    </hint>
    <hint type="destinationlabel">
     <x>207</x>
     <y>203</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>

 

 

O sistema operacional livre mais famoso e o favorito dos desenvolvedores está disponível para desktops, servidores, tabletssmartphones e com ele uma gama de novas possibilidades para se desenvolver aplicativos poderosos que cruzam os mais diferentes dispositivos.

Munidos dos recursos de modelos do Ubuntu, divididos entre Apps, no qual o desenvolvedor pode escrever uma variedade de aplicações utilizando QML, HTML5 e Cordova e dos Scopes utilizando visões dedicadas que organizam, buscam e mostram uma variedades de tipos e conteúdos na internet ou no dispositivo local, fazem do Ubuntu SDK um conjunto completo de ferramentas de alto nível para criar aplicações elegantes e funcionais que também proporcionam ao desenvolvedor força extra para manipular processos mais complicados, utilizando o poder do C++ que é a linguagem de programação escolhida para fechar com chave de ouro o Kit de desenvolvimento do Ubuntu

Ubuntu Phone: http://www.ubuntu.com/phone

E para aqueles que adoram provar que o Linux é sempre melhor que o Windows, podem se deliciar com as possibilidades da IDE gráfica do QTCreator que faz parte do Kit de desenvolvimento do Ubuntu e com seus recursos modernos tanto de design como de edição, e se adicionada a programação C++ visual para Linux com Qt (Signals e Slots) constata-se que é muito mais eficaz e rápida do que a do Windows (Message Map) pois não utiliza a arquitetura de mensagens de loops, fazendo o Visual Studio da Microsoft parecer o editor de textos Microsoft Word. E se compararmos as funcionalidades e produtividade da IDE visual para C++ do QT com a IDE visual para C++ do MFC (que por sinal é quase a mesma do .NET) você poderá ver que há vários recursos sobre layouts e manipulação de componentes que o Visual Studio não possui, além da diferença de código, o MFC gera um código automático muito maior para a mesma aplicação, contudo ainda é possível portar seus aplicativos MFC para a plataforma Linux.

Qt-Project: http://qt-project.org/

Sobre MFC e Linux: https://www.novell.com/coolsolutions/feature/11244.html

Instalando o Ubuntu SDK

O Ubuntu SDK permite que você desenvolva software para a ultima versão de sua plataforma, para isto precisamos garantir que os pacotes do seu sistema operacional estejam atualizados.

sudo apt-get update && sudo apt-get dist-upgrade
sudo add-apt-repository ppa:ubuntu-sdk-team/ppa
sudo apt-get update && sudo apt-get install ubuntu-sdk

Se estiver utilizando o Ubuntu em uma maquina virtual, a atualização de pacotes podem requerer que você reinstale os adicionais para convidados para obter a resolução widescreen da tela, veja como efetuar este procedimento em nosso post de como instalar o Ubuntu em uma maquina virtual. Outras informações sobre o Ubuntu SDK:

Ubuntu Developer: http://developer.ubuntu.com/

Configurando o Ubuntu SDK e Criando uma Aplicação

1- Após a instalação abra o Ubuntu SDK na barra de ferramentas ou abra o QTCreator. Qualquer uma das opções mostrará a janela de boas vindas do Ubuntu SDK, clique em Next:

Bem-Vindo

Bem-Vindo

2 – Na janela Build Targets, você pode criar a plataforma em que deseja compilar seus aplicativos e também escolher a versão do framework para desenvolvimento, elas são AMD64, ARMhf e i386, crie um novo kit AMD64 para garantir que todos os pacotes sejam baixados e aguarde, este procedimento pode levar algum tempo:

Criando Kit da plataforma (pode demorar)

Criando Kit da plataforma (pode demorar)

3 – Após criar o kit clique em Next para pular a criação de um emulador de dispositivos já que vamos utilizar um projeto desktop e clique em Finish para abrir o QtCreator:

Ubuntu SDK - QTCreator

Ubuntu SDK – QTCreator

4 – Com a IDE aberta clique no menu File e escolha novo projeto, na janela de modelos de projetos, em projetos escolha Applications e selecione a opção Qt Widget Application e clique em Choose:

Tipos de Projetos

Tipos de Projetos

5 – Na janela de propriedades do projeto em Name escolha MinhaApp, em Create in escolha um diretório de sua preferencia e clique em Next:

Propriedades do Projeto

Propriedades do Projeto

6 – Na janela Kit Selection escolha Desktop e clique em Next:

Kit de compilação

Kit de compilação

7 – Na janela Class Information podemos mudar os nomes de arquivos para a classe do projeto, neste primeiro momento apenas clique em Next:

Informações da Classe

Informações da Classe

8 – Na janela Project Management podemos escolher um controlador de versões para o projeto, por enquanto clique em Finish:

Gerenciamento do Projeto

Gerenciamento do Projeto

9 – Pronto você já pode ver o código fonte C++ na sua IDE, na janela Projects expanda o node Form e dê um duplo clique em mainwindow.ui para ir para o modo de design do formulário. Utilize a paleta de widgets para arrastar os componentes para o Form, arraste 4 Labels, 3 LineEdits e um PushButton, utilize a barra de ferramentas para alinhar os componentes no formulário e altere suas propriedades na janela de propriedades no canto inferior direito da tela:

Form - Design

Form – Design

10 – Após terminar o design do formulário, para criar o evento de clique do botão, selecione o componente PushButton, clique com botão direito do mouse e escolha a opção Go to Slot e na janela seguinte escolha o método Clicked() e clique OK:

Slot - Evento de Clique

Slot – Evento de Clique

11 – Você foi direcionado para o código fonte no método de clique do botão, preencha o método com o código encontrado logo abaixo e clique em RUN na barra de ferramentas do lado inferior esquerdo da IDE (seta verde):

Código Fonte - C++

Código Fonte – C++

12 – Pronto, você já criou seu primeiro programa utilizando os recursos básicos dos Widgets Qt utilizando o Kit de desenvolvimento do Ubuntu:

Ubuntu SDK - C++ - Programa

Ubuntu SDK – C++ – Programa

Agora você pode seguir os outros posts sobre como desenvolver aplicativos para o sistema operacional Ubuntu neste site.

Exemplo:

Neste exemplo criamos um aplicativo básico C++ utilizando os Widgets Qt.

C++

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    ui->lineEdit->setText("Desenvolvimento Aberto");
    ui->lineEdit_2->setText("Ubuntu - SDK - C++");
    ui->lineEdit_3->setText("QtCreator 3.1.1 - Qt 5.2.1");
}

Database – Sequence – Oracle – Python

Publicado: 29 de setembro de 2014 em Python

Uma Sequence é um objeto de banco de dados encontrado no bancos de dados Oracle, que permite a geração automática de valores, tais como números de identificação. Sequências são ideais para a tarefa de gerar valores de chaves únicas. Os aplicativos podem usar sequências para evitar possíveis problemas de simultaneidade e de desempenho resultantes de valores de coluna. A vantagem que tem sobre as  sequências de números criados fora do banco de dados é que o servidor de banco de dados mantém o registro dos números gerados e nenhum tipo de acidente no banco de dados causará números duplicados.

Oracle: Sequence

Sequence - Oracle - Python

Sequence – Oracle – Python

Algo extremamente útil sobre Sequence

Utilizar um objeto ou uma propriedade auto incremento é o método correto para criar IDs automáticos no banco de dados, nunca utilize uma Trigger para executar este procedimento, pois deste modo você esta reduzindo sensivelmente a performance do banco de dados, visto que você precisa de acessos e objetos extras para executar a mesma função.

Para valores de Sequence que são utilizados fora do banco de dados, por exemplo, números de sequência usados ​​para identificadores externos (números de cheques bancários ou outros), se o banco de dados é recuperado para um ponto no tempo antes de uma falha, então isso poderia causar a geração de valores duplicados para algumas sequências. Para evitar possíveis valores duplicados, bancos de dados que usam valores de sequência fora do banco de dados não deve ser recuperado para um ponto anterior no tempo.

Exemplo:

Neste exemplo utilizamos uma Sequence para os bancos de dados Oracle para criar identificadores automáticos para a coluna chave de uma tabela.

SQL

Oracle

-- Cria sequencia
CREATE SEQUENCE Sequencia_seq
 START WITH     1
 INCREMENT BY   1
 NOCACHE
 NOCYCLE;

-- Cria tabela
CREATE TABLE SEQUENCIA (
   Identificador   NUMBER(10),
   Nome            VARCHAR(30),
   Sobrenome       VARCHAR(70),
   Cargo           VARCHAR(30),
   Salario         Decimal(9,2));

 -- Testa sequencia
insert into SEQUENCIA VALUES (Sequencia_seq.NEXTVAL ,'Teste','Teste Sobrenome','Programador',2234.56);

-- verifica resultado
SELECT * FROM SEQUENCIA

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Sequence.py
 
# importa modulos
import wx
import wx.grid
import cx_Oracle
 
# Cria classe generica de uma WX.Grid
# A classe abaixo faz parte da documentação WXPython oficial
# Este trecho de código é util para manipular a grade
 
class GenericTable(wx.grid.PyGridTableBase):
    def __init__(self, data, rowLabels=None, colLabels=None):
        wx.grid.PyGridTableBase.__init__(self)
        self.data = data
        self.rowLabels = rowLabels
        self.colLabels = colLabels
 
    def GetNumberRows(self):
        return len(self.data)
 
    def GetNumberCols(self):
        return len(self.data[0])
 
    def GetColLabelValue(self, col):
        if self.colLabels:
            return self.colLabels[col]
 
    def GetRowLabelValue(self, row):
        if self.rowLabels:
            return self.rowLabels[row]
 
    def IsEmptyCell(self, row, col):
        return False
 
    def GetValue(self, row, col):
        return self.data[row][col]
 
    def SetValue(self, row, col, value):
        pass    
 
# Inicializa Grade
dados = []
colLabels  = []
rowLabels = []
for linha in range(1, 150):
    rowLabels.append(str(linha))

# Cria conexão
def conectarORA():
    sconexao = "user/pass@localhost/XE"
    try:
       con = cx_Oracle.connect(sconexao)
    except ValueError:
       tkMessageBox.showinfo(title="Menssagem", message="Erro de Conexão", parent=janela)
    return con
 
# Executa e retorna SQL
def retornaTabelaORA(sql, con):
     cursor = con.cursor()
     cursor.execute(sql)
     return cursor
 
def retornaDados():
    # Cria conexão
    con = conectarORA()
    # Envia dados a grid
 
    sql = "Select * from SEQUENCIA WHERE IDENTIFICADOR = (SELECT MAX(IDENTIFICADOR) FROM SEQUENCIA)"
    # retorna set de dados
    tabela = retornaTabelaORA(sql, con)
 
    # Retorna metadados da tabela
    for i in range(0, len(tabela.description)):
        colLabels.append(tabela.description[i][0])
 
    # Executa um fecth em todos os registros
    resultado = tabela.fetchall()
 
    # Popula dados
    for conteudo in resultado:
        dados.append(conteudo)
 
# Cria classe da grid
class SimpleGrid(wx.grid.Grid):
    def __init__(self, parent):
        wx.grid.Grid.__init__(self, parent, -1, pos=(5,50), size=(850,350))    
 
# Cria formulario
class TestFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "Desenvolvimento Aberto - SEQUENCE - ORACLE - Python", size=(900, 450))
        panel        = wx.Panel(self, wx.ID_ANY)
        label        = wx.StaticText(panel, -1, label='Oracle Database - Sequence - Clique no botão para inserir um numero sequencial do Oracle', pos=(5,20))
        botao        =   wx.Button(panel, label="Inserir", pos=(760,10))
        botao.Bind(wx.EVT_BUTTON, self.botaoInserir)
        self.grid         = SimpleGrid(panel)
        
    #Insere dados e dispara trigger
    def botaoInserir(self,event):
        # Conecta e cria um cursor
        con = conectarORA()
        cursor = con.cursor()
        # Insere clausula SQL
        sql = "insert into SEQUENCIA VALUES (Sequencia_seq.NEXTVAL ,\'Teste\',\'Teste Sobrenome\',\'Programador\',2234.56)"
        # Executa e comita a transação
        cursor.execute(sql)
        con.commit()        
        # Limpa grade
        self.grid.ClearGrid()
        # Atualiza grade
        self.grid.ForceRefresh()
        # Retorna set de dados
        retornaDados()        
        # Insere set de dados contidos em um tuplas
        tableBase = GenericTable(dados, rowLabels, colLabels)
        self.grid.SetTable(tableBase)
        
 
# Inicializa a aplicação
app = wx.App()
frame = TestFrame(None)
frame.Show(True)
app.MainLoop()