这是关于wxWidgets的C++编程指南,wxWidgets是一个跨平台的GUI开发工具包或开发框架(当然它也可开发非GUI应用程序),学习完本指南,你就会使用wxWidgets编写一些小程序了
目录
目录
本节向你介绍使用wxWidgets编程
wxWidgets是一个用C++编写应用程序的图形用户接口(GUI)工具包。它是一个开源、成熟和跨平台的工具包。wxWidgets应用程序在主要操作系统上都能够运行,包括Windows, Unix, 和Mac OS。项目于1992年由Julian Smart创立。
wxWidgets不仅仅是一个工具包。它还提供了许多用于处理流(streams)、数据库、线程、在线帮助或应用程序配置的类。wxWidgets由许多部件(widgets)组成。关于wxWidgets的社区站点可以访问这里
C++是使用最广泛的编程语言之一。许多著名的桌面应用程序,如MS Office, MacroMedia Flash, Firefox, Photoshop或3D Max都是用C++编写的。C++语言也主导了PC端游戏世界。它是最难的编程语言之一。换句话说,现在用C++编程与十年前已经有很大区别了。现在有很多编程工具和现成的库让我们用C++编程变得很容易了。
目前广泛使用的编程语言有好多种。下表编程语言排行来自于2017年9月TIOBE编程社区,如我们所看到的一样,C++仍然是世界上最流行的编程语言
排行 | 编程语言 | 市场占比 |
---|---|---|
1 | Java | 12.7% |
2 | C | 7.4% |
3 | C++ | 5.6% |
4 | C# | 4.8% |
5 | Python | 2.9% |
6 | PHP | 2.2% |
7 | JavaScript | 2.0% |
8 | Visual Basic .NET | 1.98% |
9 | Perl | 1.95% |
10 | Ruby | 1.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库的竞争者
下面的指令适用于Debian
$ sudo apt-get install build-essential
如果还没有安装C++编译器,应该安装build-essential包
$ sudo apt-get install libwxgtk3.0
这是安装wxWidgets包
这里只是对wxWidgets的简要介绍。
wxWidgets包含了许多对程序员完成他们的工作有所帮助的工具,包括了与字符串、文件、XML 文件、流、数据库或网络一起使用的工具。这里仅仅展示这些工具当中的一小部分。
wxWidgets库可以用于创建控制台(console)应用和GUI应用。本节将演示一些控制台应用下的工具。
下面是一个简单的控制台应用。它输出一些文本到控制台窗口。
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是一个代表一个字符串的类,下面的例子中定义了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
MakeLower和MakeUpper方法分别将字符串中的字符转换成小写和大写
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
今天到此,本微博坚持每天新增内容,感兴趣的朋友,请持续关注。。。。