一、安装wxWidgets库
在Debian系统上使用wxWidgets库来创建一个基本的窗体程序,首先需要确保已经安装了wxWidgets相关的库和开发工具。下面是安装wxWidgets的步骤:
打开终端,使用下述命令安装wxWidgets库及其开发文件:
sudo apt-get update
sudo apt-get install libwxgtk3.0-gtk3-dev
二、基本的窗体程序
一个简单的窗体程序示例。
1. 编写程序代码
创建一个新的C++源文件 main.cpp
并键入以下示例代码:
#include <wx/wx.h>
class MyApp : public wxApp
{
public:
virtual bool OnInit();
};
class MyFrame : public wxFrame
{
public:
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
};
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame("Hello World", wxDefaultPosition, wxDefaultSize);
frame->Show(true);
return true;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame(NULL, wxID_ANY, title, pos, size)
{
// This is where we create UI elements such as menus, buttons, etc.
}
这段代码定义了两个类:`MyApp` 和 MyFrame
。`MyApp` 是应用程序的入口点,它初始化一个 MyFrame
实例,这是主窗口的框架。默认情况下,`MyFrame` 显示 "Hello World" 作为标题。
3. 编译程序:
在终端中编译程序,需确保 main.cpp
位于当前目录下。使用以下命令编译:
g++ main.cpp `wx-config --cxxflags --libs` -o myapp
wx-config
工具提供了必要的编译标志和链接标志,以便使用wxWidgets库。
4. 运行程序:
编译成功后,在终端中运行程序:
./myapp
这将启动wxWidgets窗体程序,显示一个标题为 "Hello World" 的窗口。
请注意,wxWidgets 使用C++编程语言,因此确保系统上安装了C++编译器(如g++)。如果发现程序有任何编译错误,请检查wxWidgets安装是否正确,源代码文件是否有错误,并且是否正确地使用了编译命令中的反引号(`)。
三、带菜单的窗口
下面是使用wxWidgets库在Debian系统上实现一个带有基本菜单(文件(File)和帮助(Help))的窗口的完整示例。假设已经安装了wxWidgets相关的库和编译器。
1. 创建一个C++源文件 main.cpp
并填入以下的代码
#include <wx/wx.h>
class MyFrame : public wxFrame
{
public:
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
private:
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
wxDECLARE_EVENT_TABLE();
};
enum
{
ID_Hello = 1
};
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
wxEND_EVENT_TABLE()
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame("Hello wxWidgets", wxDefaultPosition, wxDefaultSize);
frame->Show(true);
return true;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame(NULL, wxID_ANY, title, pos, size)
{
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("Welcome to wxWidgets!");
}
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close(true);
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox("This is a wxWidgets Hello World example",
"About Hello World", wxOK | wxICON_INFORMATION);
}
这段代码定义了一个简单的窗口类 MyFrame
和一个应用程序类 MyApp
。在 MyFrame
的构造函数中,创建了两个菜单,一个是 "File",另一个是 "Help"。此外,我们还定义了两个事件处理函数 OnQuit
和 OnAbout
来响应菜单项的点击事件。
2.编译
g++ main.cpp `wx-config --cxxflags --libs` -o menu_app
3. 编译成功后,在终端中运行程序
./menu_app
当运行这个程序时,它将创建一个带有标题 "Hello wxWidgets" 的窗口。在窗口的顶部,会看到一个菜单栏,包含 "File" 和 "Help" 两个菜单项。在 "File" 菜单下会找到一个 "Hello..." 菜单项和一个退出程序的选项。"Help" 菜单包含一个 "About" 弹窗,它显示一个消息框信息。
请确保在复制代码或者重打代码时,注意所有的括号和分号,因为不正确的符号使用可能导致编译错误。此外,编译命令中的反引号(`)是必需的,因为它们是执行 wx-config
命令并插入其输出的shell特性。
【参考】
【C++】Ubuntu编译filezilla client-CSDN博客