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());
}

 

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s