WBoard 是一款在 Windows 平台基于 VS+Qt 开发的一款开放源码的白板教学软件,主要用于学校和大学的交互式电子白板。 它既可以与交互式白板一起使用,也可以在双屏幕场景中通过笔、平板显示器和光束进行使用。 主要有演示板、网页、文档和桌面四大界面。
编译环境
编译器安装
安装 Visual Studio: VS2017 及以上 Qt: Qt5

2.Visual Studio 官网下载地址:
https://visualstudio.microsoft.com/zh-hans/downloads/
3.Qt5.15.2 下载地址
https://download.qt.io/official_releases/online_installers/
4.Visual Studio 配置 Qt 教程博客
https://download.qt.io/official_releases/online_installers/
配置项目
解压项目并打开项目工程文件,并配置 Qt 编译环境

2.选择 Qt 构建项目并选择 Qt 项目设置

1.查看 Qt 模块,是否含有以下模块,如没有去 Qt 安装目录找到 MaintenanceTool.exe 安装缺失模块并安装,详细安装步骤参考文献:https://www.cnblogs.com/lisongzzx/p/13861430.html

4.检查 Qt Version 配置与项目属性是否一致。

5.编译程序完成之后配置依赖,找到项目文件中的三方库 ThirdParty 文件夹,找到依赖动态库 quazipd.dll,再将 quazipd.dll 放在可执行程序下。

6.项目运行截图

项目模块解读
图形管理模块
图形管理模由图形动作、图形场景、图形形状、操作委托组成。
图形动作管理:负责管理和控制图形对象的各种动作,例如图形的创建、移动、缩放、旋转、删除等基本操作,以及更复杂的动画效果、交互动作的设置与执行
图形场景管理:主要对写字板项目中的图形展示场景进行管理。包括场景的布局设置、背景颜色与样式的定义、不同图形元素在场景中的层次与排列顺序管理,以及对场景视图的缩放、平移、旋转等操作的控制。
图形形状管理:专注于对图形的形状进行创建、编辑和管理。涵盖了基本图形(如矩形、圆形、三角形等)的绘制与参数设置,自定义图形的绘制工具与功能,对已绘制图形的形状修改(如顶点编辑、曲线调整等),以及图形的填充、描边样式的设置与管理。
图形操作委托(代理):用于处理图形操作的任务分配与权限管理。当用户发起图形操作请求时,操作委托机制会根据预设的规则和权限,将操作任务分配给相应的处理模块或组件。同时,还负责监控和管理操作的执行过程,处理可能出现的错误与异常情况,确保图形操作的安全性和稳定性。
图形动作管理

WBGraphicsItemActions: 改基类主要用于处理图形项的各种操作和动作,定义了图形项操作的基本接口,声明了纯虚函数 play 用于执行操作、save 用于保存操作相关的数据、actionRemoved 用于处理操作被移除的情况,对应代码如下
class WBGraphicsItemAction : public QObject
{
Q_OBJECT
public:
WBGraphicsItemAction(eWBGraphicsItemLinkType linkType,QObject* parent = 0);
virtual void play() = 0;
virtual QStringList save() = 0;
virtual void actionRemoved();
virtual QString path() {return "";}
eWBGraphicsItemLinkType linkType() { return mLinkType;}
private:
eWBGraphicsItemLinkType mLinkType;
};
WBGraphicsItemPlayAudioAction : 是用于播放音频的图形项操作类,存储了音频文件的路径、媒体播放器对象等,实现了 `play` 方法来播放音频,实现了 `save` 方法来保存相关数据, 定义了 `onSourceHide` 槽函数,可能用于处理音频源隐藏的情况。
WBGraphicsItemMoveToPageAction: 是用于移动到特定页面的图形项操作类。包含了移动页面的操作类型(如移动到首页、末页、上一页、下一页或指定页)和目标页面的索引,实现了 `play` 方法来执行移动操作,实现了 `save` 方法来保存相关信息。
WBGraphicsItemLinkToWebPageAction: 是用于链接到网页的图形项操作类。存储了链接的网页 URL 。实现了 `play` 方法来执行打开网页的操作。实现了 `save` 方法来保存链接相关的数据。
图形场景管理

WBCoreGraphicsScene: 该类是对`QGraphicsScene` 的扩展,在 QGraphicsScene 的基础上增加接口来`对图形项进行添加删除管理和场景修改状态的跟踪功能`,接口如下
class WBCoreGraphicsScene : public QGraphicsScene
{
public:
WBCoreGraphicsScene(QObject * parent = 0);
virtual ~WBCoreGraphicsScene();
virtual void addItem(QGraphicsItem* item);
virtual void removeItem(QGraphicsItem* item, bool forceDelete = false);
virtual bool deleteItem(QGraphicsItem* item);
void removeItemFromDeletion(QGraphicsItem* item);
void addItemToDeletion(QGraphicsItem *item);
bool isModified() const{return mIsModified;}
void setModified(bool pModified){mIsModified = pModified;}
private:
QSet<QGraphicsItem*> mItemsToDelete;
bool mIsModified;
};
WBGraphicsScene: 是一个自定义的图形场景类,具有丰富的功能用于`管理图形项`、`处理输入事件、执行绘制操作`等。
提供了多种方法用于管理`撤销/重做栈的状态,清除场景内容(如项目、注释等)`、处理输入设备的操作(按下、移动、释放)。
添加和移除图形项等方法,`能够创建和添加各种类型的图形项`,如小部件、媒体、SVG 图像、文本、组等,并且提供了一些方法用于处理背景对象的设置和获取,以及对`图形项进行缩放、适应文档大小`等操作。
包含一些与绘制相关的方法,如`画线、画弧、画曲线`等,并能`处理橡皮擦、指针、标记圆`等的绘制,还能支持获取场景的视图状态、设置渲染质量、获取依赖项、处理选择框的更新等。
图形形状管理

WBAbstractDrawRuler: 这个抽象类为具体的绘制尺子类提供了基本的框架和一些通用的操作,子类需要实现特定于场景和旋转等操作的细节。定义了一些虚函数,如 `StartLine` 、 `DrawLine` 、 `EndLine` ,用于开始、绘制和结束线条。`paint` 方法用于绘制操作。包含一些纯虚函数,如 `scene` 、 `rotateAroundCenter` 等,需要子类具体实现。有一些保护成员变量用于控制显示、存储SVG 项、比例等信息。定义了一系列的辅助函数用于获取不同的光标、颜色、字体等。包含一些静态常量用于颜色、边距、角度单位等的定义,具体定义如下图。
class WBAbstractDrawRuler : public QObject
{
Q_OBJECT
public:
WBAbstractDrawRuler();
~WBAbstractDrawRuler();
void create(QGraphicsItem& item);
virtual void StartLine(const QPointF& position, qreal width);
virtual void DrawLine(const QPointF& position, qreal width);
virtual void EndLine();
protected:
void paint();
QCursor moveCursor() const;
QCursor rotateCursor() const;
QCursor closeCursor() const;
QCursor drawRulerLineCursor() const;
QColor drawColor() const;
QColor middleFillColor() const;
QColor edgeFillColor() const;
QFont font() const;
virtual WBGraphicsScene* scene() const = 0;
virtual void rotateAroundCenter(qreal angle) = 0;
virtual QPointF rotationCenter() const = 0;
virtual QRectF closeButtonRect() const = 0;
virtual void paintGraduations(QPainter *painter) = 0;
bool mShowButtons;
QGraphicsSvgItem* mCloseSvgItem;
qreal mAntiScale





