wxWidgets - Crie Interfaces Gráficas com Portabilidade em C++

Escreva uma vez e utilize no Linux, Windows e macOS.


wxWidgets - Crie Interfaces Gráficas com Portabilidade em C++

Criar interface gráfica é uma tarefa indispensável para muitos casos. Nós possuímos um Curso específico de criação de interface gráfica com Qt para Linux e Windows, além também de uma série com criação de interface gráfica com Gtkmm .

Mas nesse cpp::daily de hoje vamos conhecer uma que também não fica para atrás e seu diferencial é a PORTABILIADADE.

Introdução

wxWidgets é uma biblioteca C++ que permite aos desenvolvedores criar aplicativos para Windows, macOS, Linux e outras plataformas com uma única base de código.

É possível também utilizá-la em linguagem populares como: Python, Perl, Ruby e muitas outras linguagens .

Ao contrário de outros kits de ferramentas de plataforma cruzada, wxWidgets dá aos aplicativos uma aparência verdadeiramente nativa porque usa a API nativa da plataforma em vez de emular a GUI. Também é extenso, gratuito, de código aberto e maduro.

Instalação

No site do wxWidgets há o procedimento para instalar para todas as plataformas, veja esse link. Mas como exemplo, vamos mostrar o procedimento no Linux, mais precisamente em distros que usam o APT, o comando é:

sudo apt-add-repository 'deb https://repos.codelite.org/wx3.1.5/ubuntu/ groovy universe'
sudo apt update
sudo  apt install libwxbase3.1-0-unofficial \
                 libwxbase3.1unofficial-dev \
                 libwxgtk3.1-0-unofficial \
                 libwxgtk3.1unofficial-dev \
                 wx3.1-headers \
                 wx-common \
                 libwxgtk-media3.1-0-unofficial \
                 libwxgtk-media3.1unofficial-dev \
                 libwxgtk-webview3.1-0-unofficial \ 
                 libwxgtk-webview3.1unofficial-dev \ 
                 libwxgtk-webview3.1-0-unofficial-dbg \ 
                 libwxbase3.1-0-unofficial-dbg \
                 libwxgtk3.1-0-unofficial-dbg \
                 libwxgtk-media3.1-0-unofficial-dbg \
                 wx3.1-i18n \
                 wx3.1-examples

Existem outras formas e como havia dito, também há para outras distros.

Utilização

A documentação do wxWidgets é invejável, mas vamos criar um exemplo básico aqui, mais ou menos um Hello, World! só que com alguns recursos a mais pra não ficar tão básico.

O código tem o header e o source incluso e sem main: vim wx.cpp.

E insira esse código:

// wxWidgets "Hello World" Program
// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif

class MyApp : public wxApp{
public:
    virtual bool OnInit();
};

class MyFrame : public wxFrame{
public:
    MyFrame();
private:
    void OnHello(wxCommandEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
};

enum{
    ID_Hello = 1
};

wxIMPLEMENT_APP(MyApp);

bool MyApp::OnInit(){
    MyFrame *frame = new MyFrame();
    frame->Show(true);
    return true;
}

MyFrame::MyFrame() : wxFrame(NULL, wxID_ANY, "Hello World"){
    wxMenu *menuFile = new wxMenu;
    menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
                     "Help string shown in status bar for this menu item");
    menuFile->AppendSeparator();
    menuFile->Append(wxID_EXIT);
    wxMenu *menuHelp = new wxMenu;
    menuHelp->Append(wxID_ABOUT);
    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append(menuFile, "&File");
    menuBar->Append(menuHelp, "&Help");
    SetMenuBar( menuBar );
    CreateStatusBar();
    SetStatusText("Bem-vindo ao Terminal Root!");
    Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);
    Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT);
    Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT);
}

void MyFrame::OnExit(wxCommandEvent& event){
    Close(true);
}

void MyFrame::OnAbout(wxCommandEvent& event){
    wxMessageBox("Isso é um exmeplo, mas já funciona certinho!",
                 "Sobre Terminal Root", wxOK | wxICON_INFORMATION);
}

void MyFrame::OnHello(wxCommandEvent& event){
    wxLogMessage("Terminal Root - Linux e Desenvolvimento");
}

Pra compilar, rode o comando:

g++ wx.cpp $(wx-config --cxxflags --libs)

Após rodar: ./a.out aparecerá:

Nesse exemplo, cliquei em File > Hello e apareceu o messageBox

wxWidgets Running

Simples, né?! Para mais informações consulte o site: https://www.wxwidgets.org/


Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !

Acompanhe o cpp::daily

Deseja aprender C++ e criar seus programas Gráficos e para Terminal com portabilidade para Linux e Windows?

Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:

Acesse o endereço:

https://terminalroot.com.br/cpp/ e saiba mais!


cpp gui


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!