65.9K
CodeProject 正在变化。 阅读更多。
Home

GT: 一个 C++ 图形用户界面库和系统

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.45/5 (14投票s)

2015年4月17日

LGPL3

5分钟阅读

viewsIcon

81019

downloadIcon

4024

GT 是一个紧凑、高效且可定制的图形用户界面 (GUI) 库,适用于 Windows 环境。

GT

一个 C++ 图形用户界面库和系统
作者:Anthony Daniels
电子邮件:AnthonyDaniels99@gmail.com

下载源代码

下载 GTTestApps_20170213.zip

引言

GT 是一个紧凑、高效且可定制的图形用户界面 (GUI) 库,适用于 Windows 环境(最终将支持 Linux 和 Mac)。大部分代码是平台无关的,仅直接依赖于操作系统的图形、线程和剪贴板 API(这些功能已被封装)。随着 GUI 系统的不断涌现,人们可能会问为何还要创建一个新的系统。GT 的创建是为了解决一些主要竞争对手的不足之处,同时保持其高度紧凑的特性(GT 目前约有 90,000 行代码,包括注释)。由于代码行数很少,GT 可以直接嵌入到您的应用程序解决方案或项目文件中。它的主要竞争对手包括 MFC、QT、GIMP Toolkit、wxWidgets、Fox Toolkit。GT 在设计和功能上最接近 QT,但存在一些差异。

与竞争对手的比较

首先,整个 GT 框架构建在 HPC 模板库 (HTL) 之上。HTL 是标准模板库 (STL) 的一个补充,提供了面向多线程和多进程编程的线程安全对象。GT 几乎使用了整个 HTL,其中三个 HTL 包被最频繁地使用。它们是容器、信号与槽以及线程包。GT 在对象库的所有关键函数中只使用线程安全容器。GT 也像 QT 一样是一个基于信号与槽的系统。与 MFC 和 Fox Toolkit 中基于宏的事件 coupling 到代码(无法进行调试跟踪)不同,信号与槽提供了连接事件到代码的更清晰的途径。GT 在信号与槽方面比 QT 有一些改进。首先,您可以拥有公共、保护和私有信号,而 QT 只允许保护信号。其次,连接不是像 QT 那样通过宏进行的。第三,无需 Q_OBJECT 元对象和代码,提供了更简洁的包(无需元对象编译器步骤)。第四,GtObject 中的任何函数都可以附加到具有相同原型的信号(QT 的最新版本也支持这一点,但作者仍想提及);无需声明“slots:”。每个成员函数都是一个潜在的槽。

另一个主要区别是 GT 不绘制原生控件。如果您深入了解其他软件包(例如 QT)的代码,您会发现它们在大多数情况下都在绘制 API 原生控件。这种多层间接调用到一个绘制所有不同控件的单一整体绘制器,与 GT 所采取的方法不同。每个 GtWidget 都有一个 OnPaint() 方法,并且小部件负责绘制自身。图形比大多数当前一代操作系统控件更简单,但这一选择符合 GT 的紧凑性特性。鼓励用户修改绘制算法以获得更复杂的外观。

GT 像 QT 一样,提供了一个抽象项模型系统,用于在 GUI 中显示对象及其数据的集合。QT 的设计理念是列表、表格和树都使用相同的抽象项模型。然而,GT 为列表、表格和树采用了单独的抽象项模型。之所以选择拥有 listmodeltablemodeltreemodel,是因为作者认为代码更简单,更容易使用和构建。这种抽象项模型设计的根本性转变是 GT 被创建的原因。作者是 QT 的长期用户和爱好者。

GT 库结构

GT 目前有四个库:GtCoreGtGuiGtOpenGLGtChartGtCore 包含 GT 系统所有核心类。它包含以下包:GtBaseGtEventGtGeometryGtGraphicGtInputOutputGtItemModelGtMathGtProcessGtSortingGtStateMachine。这些包及其构成类的描述将在类概述文档中提供。GtGui 包含所有用于基本 GUI 开发的类。它包含以下包:GtBasicControlsGtGridViewGtModelViewGtScientificGtTextViewGtWinFormsGtOpenGL 包含通过 OpenGL 库进行 3D 对象可视化所需的类。GtChart 包含科学绘图和图表所需的类。

示例 GUI

示例包包含 15 个不同的 GUI 项目,展示了 GT 中各种控件的用法。要构建示例包,请将 GT2013GT_TEST_2013 文件夹放在文件层次结构中的同一级别。将库从 GT2013 的 Debug 或 Release 文件夹复制到示例包的目标文件夹。现在您应该能够构建并运行示例包。应用程序示例如下:

名称 描述
GtTest_02_Simple 此应用程序展示了 GT 的大多数基本控件。
GtTest_03_ToolBox 此应用程序展示了工具箱控件的用法。
GtTest_04_TabView 此应用程序展示了标签页视图控件的用法。
GtTest_05_ScrollArea 此应用程序展示了可滚动区域控件的用法。
GtTest_06_Modal 此应用程序展示了模态和非模态对话框的用法。
GtTest_07_ListView 此应用程序展示了抽象项列表视图的用法。
GtTest_08_TableView 此应用程序展示了抽象项表视图的用法。
GtTest_09_TreeView 此应用程序展示了抽象项树视图的用法。
GtTest_10_OpenGL 此应用程序展示了 3D 查看器的用法。
GtTest_11_SimpleChart 此应用程序展示了基本 plot2D 的用法。
GtTest_12_LogChart 此应用程序展示了对数刻度的用法。
GtTest_13_BarColumn 此应用程序展示了条形图和柱状图的用法。
GtTest_14_PieChart 此应用程序展示了饼图的用法。
GtTest_15_MultiPlot 此应用程序展示了通用多图的用法。

示例 GUI 屏幕截图

这里是一些示例 GUI 的屏幕截图。

GtTest_02_Simple 应用程序
 
GtScientific 控件示例

GtTest_03_ToolBox 应用程序

GtTest_07_ListView 应用程序

GtTest_10_OpenGL 应用程序

GtTest_12_LogChart 应用程序

GtTest_14_PieChart 应用程序

GtTest_15_MultiPlot 应用程序

已知问题

任何 bug 请报告给作者,如果您有兴趣参与 GT 开发,请告知我。我打算为该项目设置一个 GitHub 仓库。

© . All rights reserved.