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