【C++】wxWidgets库实现窗体程序

发布时间:2024年01月14日

一、安装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博客

文章来源:https://blog.csdn.net/eidolon_foot/article/details/135570474
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。