Adicionando Ações de Menu em uma Aplicação C++ QT

As ações de menu são uma parte importante de muitas aplicações desktop, e as aplicações C++ QT não são exceção. Neste artigo, mostraremos como adicionar ações aos itens de menu em uma aplicação C++ QT.

Criando uma Janela Principal

Para começar, precisamos criar uma janela principal para nossa aplicação. O código a seguir mostra como criar uma janela principal simples usando a classe QMainWindow:

	#include <QApplication>
	#include <QMainWindow>
	#include <QMenu>
	#include <QMenuBar>
	#include <QAction>

	int main(int argc, char *argv[])
	{
	    QApplication app(argc, argv);

	    QMainWindow window;
	    window.setWindowTitle("My Application");

	    QMenu *fileMenu = window.menuBar()->addMenu("&File");

	    QAction *openAction = new QAction("&Open", &window);
	    fileMenu->addAction(openAction);

	    window.show();

	    return app.exec();
	}
	

O código acima cria uma nova instância de QMainWindow, define seu título como “My Application” e mostra a janela principal. Em seguida, ele cria um novo item de menu “File” usando a classe QMenu, cria uma ação “Open” usando a classe QAction e adiciona a ação ao item de menu “File”.

Adicionando Ações de Menu

Para adicionar uma ação de menu que execute uma função quando o item de menu é selecionado, podemos usar a função connect do QT. O código a seguir mostra como adicionar uma ação de menu “Quit” que fecha a aplicação quando o item de menu é selecionado:

	int main(int argc, char *argv[])
	{
	    QApplication app(argc, argv);

	    QMainWindow window;
	    window.setWindowTitle("My Application");

	    QMenu *fileMenu = window.menuBar()->addMenu("&File");

	    QAction *openAction = new QAction("&Open", &window);
	    fileMenu->addAction(openAction);

	    QAction *quitAction = new QAction("&Quit", &window);
	    fileMenu->addAction(quitAction);

	    QObject::connect(quitAction, &QAction::triggered, &app, &QApplication::quit);

	    window.show();

	    return app.exec();
	}
	

O código acima adiciona uma nova ação de menu “Quit” e conecta a função QApplication::quit ao sinal triggered da ação, que é emitido quando o item de menu é selecionado.

Criando uma Janela Filha

Para criar uma janela filha em resposta à seleção de um item de menu, podemos usar a classe QDialog. O

O código a seguir mostra como adicionar uma ação “About” ao item de menu “Help”, que exibe uma janela de diálogo “About” quando selecionado:

class AboutDialog : public QDialog
{
public:
    AboutDialog(QWidget *parent = nullptr)
        : QDialog(parent)
    {
        setWindowTitle("About");
        setFixedSize(200, 100);

        QLabel *label = new QLabel("This is my application", this);
        label->setGeometry(10, 10, 180, 80);
        label->setAlignment(Qt::AlignCenter);
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QMainWindow window;
    window.setWindowTitle("My Application");

    QMenu *fileMenu = window.menuBar()->addMenu("&File");

    QAction *openAction = new QAction("&Open", &window);
    fileMenu->addAction(openAction);

    QAction *quitAction = new QAction("&Quit", &window);
    fileMenu->addAction(quitAction);

    QObject::connect(quitAction, &QAction::triggered, &app, &QApplication::quit);

    QMenu *helpMenu = window.menuBar()->addMenu("&Help");

    QAction *aboutAction = new QAction("&About", &window);
    helpMenu->addAction(aboutAction);

    QObject::connect(aboutAction, &QAction::triggered, [&]() {
        AboutDialog dialog(&window);
        dialog.exec();
    });

    window.show();

    return app.exec();
}

O código acima cria uma nova classe de janela de diálogo AboutDialog que é exibida quando a ação de menu “About” é selecionada. A janela de diálogo contém um rótulo simples com o texto “This is my application”. A ação de menu “About” é criada e conectada a uma função lambda que cria uma nova instância de AboutDialog e a exibe usando a função exec.

Conclusão

Adicionar ações de menu em uma aplicação C++ QT é uma tarefa relativamente simples. O QT fornece classes úteis, como QMainWindow, QMenu, QAction e QDialog, que podem ser usadas para criar menus e janelas de diálogo facilmente.