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.
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.
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.
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
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++ !
Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:
Acesse o endereço: