当前位置: 首页 > 工具软件 > wxWidgets > 使用案例 >

wxWidgets编程指南

薛欣荣
2023-12-01

这是关于wxWidgets的C++编程指南,wxWidgets是一个跨平台的GUI开发工具包或开发框架(当然它也可开发非GUI应用程序),学习完本指南,你就会使用wxWidgets编写一些小程序了

目录

目录

wxWidgets简介

wxWidgets

C++编程语言

编程语言

多平台编程

安装wxWidgets

wxWidgets的辅助工具

控制台(console)应用

wxString类

实用函数

时间和日期


wxWidgets简介

本节向你介绍使用wxWidgets编程

wxWidgets

wxWidgets是一个用C++编写应用程序的图形用户接口(GUI)工具包。它是一个开源、成熟和跨平台的工具包。wxWidgets应用程序在主要操作系统上都能够运行,包括Windows, Unix, 和Mac OS。项目于1992年由Julian Smart创立。

wxWidgets不仅仅是一个工具包。它还提供了许多用于处理流(streams)、数据库、线程、在线帮助或应用程序配置的类。wxWidgets由许多部件(widgets)组成。关于wxWidgets的社区站点可以访问这里

C++编程语言

C++是使用最广泛的编程语言之一。许多著名的桌面应用程序,如MS Office, MacroMedia Flash, Firefox, Photoshop或3D Max都是用C++编写的。C++语言也主导了PC端游戏世界。它是最难的编程语言之一。换句话说,现在用C++编程与十年前已经有很大区别了。现在有很多编程工具和现成的库让我们用C++编程变得很容易了。

编程语言

目前广泛使用的编程语言有好多种。下表编程语言排行来自于2017年9月TIOBE编程社区,如我们所看到的一样,C++仍然是世界上最流行的编程语言

排行编程语言市场占比
1Java12.7%
2C7.4%
3C++5.6%
4C#4.8%
5Python2.9%
6PHP2.2%
7JavaScript2.0%
8Visual Basic .NET1.98%
9Perl1.95%
10Ruby1.9

Java是使用最广泛的编程语言。Java在创建移动应用、编写各种应和企业级应用方面更擅长。而每四个应用就有一个是C/C++编写的。它们是创建操作系统和各种桌面应用程序的标准。C/C++在系统编程方面使用最广泛。

C#是MicroSoft .NET平台的主要编程语言

PHP统揽了整个web领域。同时,Java主要由大的组织所使用,而PHP则主要被小的公司和个人使用,它主要用于制作动态Web应用程序。

而Visual Basic .NET是另一个流行的.NET编程语言。它代表了快速开发应用的流行趋势(RAD --Rapid Application Development)。

多平台编程

如今,多平台编程已经风靡全球。因此,大多数的语言和工具库都要求是多平台的。而wxWidgets从一开始就是作为一个多平台的工具库。对于大多数开发Web应的开发者考虑的就是这一点。或者可以使用wxWidgets、Swing、SWT。Qt工具库是最接近wxWidgets库的竞争者

安装wxWidgets

下面的指令适用于Debian

$ sudo apt-get install build-essential

如果还没有安装C++编译器,应该安装build-essential包

$ sudo apt-get install libwxgtk3.0

这是安装wxWidgets包

这里只是对wxWidgets的简要介绍。

wxWidgets的辅助工具

wxWidgets包含了许多对程序员完成他们的工作有所帮助的工具,包括了与字符串、文件、XML 文件、流、数据库或网络一起使用的工具。这里仅仅展示这些工具当中的一小部分。

wxWidgets库可以用于创建控制台(console)应用和GUI应用。本节将演示一些控制台应用下的工具。

控制台(console)应用

下面是一个简单的控制台应用。它输出一些文本到控制台窗口。

console.cpp

#include <wx/string.h>
int main(int argc, char **argv)
{
  wxPuts(wxT("A wxWidgets console application"));
  return 0;
}
$ g++ console.cpp `wx-config --cxxflags --libs` -o console

编译这个控制台应用程序,运行后,将输出: a wxWidgets console application

wxString类

wxString是一个代表一个字符串的类,下面的例子中定义了3个wxString对象。然后我们用加法操作符将它们加起来创建一个新的字符串。

addition.cpp

#include <wx/string.h>
int main(int argc, char **argv)
{
  wxString str1 = wxT("Linux");
  wxString str2 = wxT("Operating");
  wxString str3 = wxT("System");

  wxString str = str1 + wxT(" ") + str2 + wxT(" ") + str3;
  wxPuts(str);
  return 0;
}

编译运行该程序将输出:Linux Operating System。

用于格式化字符串的Printf方法

formatted.cpp

#include <wx/string.h>

int main(int argc, char **argv)
{

  int flowers = 21;

  wxString str;
  str.Printf(wxT("There are %d red roses."), flowers);
  
  wxPuts(str);
  return 0;
}

本程序将输出:There are 21 red roses.

下面的例子检查一个字符串是否包含另一个字符串。实现这个功能有Contains方法。

contains.cpp

#include <wx/string.h>

int main(int argc, char **argv)
{
  wxString str = wxT("The history of my life");

  if (str.Contains(wxT("history"))) {
      wxPuts(wxT("Contains!"));
  }

  if (!str.Contains(wxT("plain"))) {
      wxPuts(wxT("Does not contain!"));
  }
  return 0;
}

程序输出:

Contains!
Does not contain!

返回字符串中字符数的方法Len

length.cpp

#include <wx/string.h>

int main(int argc, char **argv)
{
  wxString str = wxT("The history of my life");
  wxPrintf(wxT("The string has %d characters\n"), str.Len());
  return 0;
}

程序输出:

The string has 22 characters

MakeLowerMakeUpper方法分别将字符串中的字符转换成小写和大写

cases.cpp

#include <wx/string.h>

int main(int argc, char **argv)
{
  wxString str = wxT("The history of my life");

  wxPuts(str.MakeLower());
  wxPuts(str.MakeUpper());
  return 0;
}

程序将输出:

the history of my life
THE HISTORY OF MY LIFE

实用函数

wxWidgets有几个便于执行进程的实用函数,获取用户主目录或操作系统名称等

下面的例子是执行一个Unix的 ls 命令。执行这个,wxWidgets提供了一个wxShell函数

shell.cpp

#include <wx/string.h>
#include <wx/utils.h>
int main(int argc, char **argv)
{
  wxShell(wxT("ls -l"));
}
输出结果如下:
total 40
-rwxr-xr-x 1 vronskij vronskij  9028 2007-09-06 22:10 basic
-rw-r--r-- 1 vronskij vronskij    95 2007-09-06 22:09 basic.cpp
-rw-r--r-- 1 vronskij vronskij   430 2007-09-06 00:07 basic.cpp~
-rwxr-xr-x 1 vronskij vronskij 11080 2007-09-05 23:17 console
-rw-r--r-- 1 vronskij vronskij   500 2007-09-05 23:17 console.cpp
-rw-r--r-- 1 vronskij vronskij   485 2007-09-05 23:16 console.cpp~

接下来我们将使用获取用户主目录,操作系统名,用户名,主机名和总共的磁盘自由空间

system.cpp

#include <wx/string.h>
#include <wx/utils.h>
int main(int argc, char **argv)
{
  wxPuts(wxGetHomeDir());
  wxPuts(wxGetOsDescription());
  wxPuts(wxGetUserName());
  wxPuts(wxGetFullHostName());
  long mem = wxGetFreeMemory().ToLong();
  wxPrintf(wxT("Memory: %ld\n"), mem);
}

程序输出结果如下:

/home/vronskij
Linux 2.6.20-16-generic i686
jan bodnar
spartan
Memory: 741244928

时间和日期

在wxWidgets中,有几个与日期和时间相关的类,下面的例子以各种格式显示当前日期或时间

datetime.cpp

#include <wx/datetime.h>
int main(int argc, char **argv)
{
  wxDateTime now = wxDateTime::Now();
  wxString date1 = now.Format();
  wxString date2 = now.Format(wxT("%X"));
  wxString date3 = now.Format(wxT("%x"));
  wxPuts(date1);
  wxPuts(date2);
  wxPuts(date3);
}

程序的输出结果如下:

Thu Feb  4 11:05:33 2021
11:05:33
02/04/21

接下来我们将展示不同城市的当前时间

datetime2.cpp

#include <wx/datetime.h>
int main(int argc, char **argv)
{
  wxDateTime now = wxDateTime::Now();
  wxPrintf(wxT("   Tokyo: %s\n"), now.Format(wxT("%a %T"), 
      wxDateTime::GMT9).c_str());
  wxPrintf(wxT("  Moscow: %s\n"), now.Format(wxT("%a %T"), 
      wxDateTime::MSD).c_str());
  wxPrintf(wxT("Budapest: %s\n"), now.Format(wxT("%a %T"), 
      wxDateTime::CEST).c_str());
  wxPrintf(wxT("  London: %s\n"), now.Format(wxT("%a %T"), 
      wxDateTime::WEST).c_str());
  wxPrintf(wxT("New York: %s\n"), now.Format(wxT("%a %T"), 
      wxDateTime::EDT).c_str());
}

程序输出结果如下:

Tokyo: Sat 05:42:24
  Moscow: Sat 00:42:24
Budapest: Fri 22:42:24
  London: Fri 22:42:24
New York: Fri 16:42:24

下面的例子是展示如何对日期或时间加上一段期间,我这里们以当前时间增加一个月为例

datespan.cpp

#include <wx/datetime.h>
int main(int argc, char **argv)
{
  wxDateTime now = wxDateTime::Now();
  wxString date1 = now.Format(wxT("%B %d %Y"));
  wxPuts(date1);
  wxDateSpan span(0, 1);
  wxDateTime then = now.Add(span);
  wxString date2 = then.Format(wxT("%B %d %Y"));
  wxPuts(date2);
}

程序输出结果如下:

February 04 2021
March 04 2021

今天到此,本微博坚持每天新增内容,感兴趣的朋友,请持续关注。。。。

 类似资料: