一个很实用的钢笔绘制工具PenTool

demo 体验一下

最近在github上闲逛的时候发现了一个不错的小插件 penTool. 这个工具支持用鼠标在canvas上绘制路径。既然是工具,当然得比canvas原生的功能要强大突出的地方,我主要总结了几点:

  • 支持鼠标绘制
  • 绘制完成后可随意编辑
  • 对曲线的绘制很友好。bezierCurve 绘制曲线总是不那么直观,而且计算坐标是一件很头疼的事,penTool完美的解决了这个问题

准备

看完文档后,我迫不及待地准备尝试一下效果。penTool 是可以通过cdn引入的,但是如果不是纯静态页面,还需要自启服务;我想试一下penTool在模块化项目中的效果,为了偷懒,我使用vue-cli3 快速的搭建了一个新项目:

vue create demo

把新建项目的helloWorld template 删除,再加上一个 button和 canvas,然后通过npm 引入 penTool:

npm install pen-tool

App.vue 经过修改后代码如图:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在工具栏中使用了一个 QComboBox 来选择绘图工具,你可以通过信号和槽机制来将其与画布类关联,并在画布类中相应地处理绘画操作。 下面是一个示例,演示如何将 QComboBox 与画布类关联: 1. 首先,在你的 MainWindow 类中创建一个 QComboBox,并将其添加到工具栏中。例如: ```cpp QToolBar *toolbar = new QToolBar(this); QComboBox *toolComboBox = new QComboBox(this); toolComboBox->addItem("Pen"); toolComboBox->addItem("Eraser"); toolbar->addWidget(toolComboBox); addToolBar(toolbar); ``` 2. 然后,将 QComboBox 的 `currentIndexChanged` 信号与 MainWindow 类中的槽函数关联起来。在槽函数中,你可以根据选择的绘图工具来更新画布类中的当前绘图工具。例如: ```cpp connect(toolComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MainWindow::updateCurrentTool); ``` 3. 在 MainWindow 类中定义槽函数 `updateCurrentTool`,并在这个函数中更新画布类中的当前绘图工具。例如: ```cpp void MainWindow::updateCurrentTool(int index) { if (index == 0) { area->setCurrentTool(PaintArea::PenTool); } else if (index == 1) { area->setCurrentTool(PaintArea::EraserTool); } } ``` 4. 在画布类(例如 PaintArea 类)中,定义一个枚举或变量来表示当前的绘图工具。然后,在绘制事件函数(例如 `paintEvent`)或鼠标事件函数中,根据当前选择的绘图工具来相应地处理绘画操作。 以下是一个示例,展示了如何在 PaintArea 类中处理不同的绘图工具: ```cpp class PaintArea : public QWidget { public: enum DrawingTool { PenTool, EraserTool }; // ... void setCurrentTool(DrawingTool tool) { currentTool = tool; } protected: void mousePressEvent(QMouseEvent *event) override { if (currentTool == PenTool) { // 处理画笔工具的绘画操作 } else if (currentTool == EraserTool) { // 处理橡皮擦工具的绘画操作 } } void mouseMoveEvent(QMouseEvent *event) override { if (currentTool == PenTool) { // 处理画笔工具的绘画操作 } else if (currentTool == EraserTool) { // 处理橡皮擦工具的绘画操作 } } void paintEvent(QPaintEvent *event) override { QPainter painter(this); if (currentTool == PenTool) { // 处理画笔工具的绘画操作 } else if (currentTool == EraserTool) { // 处理橡皮擦工具的绘画操作 } } private: DrawingTool currentTool; }; ``` 在上述示例中,我们使用 `DrawingTool` 枚举来表示当前的绘图工具。在鼠标事件函数和绘制事件函数中,根据当前选择的绘图工具执行相应的绘画操作。 希望这可以帮助你将 QComboBox 与画布类关联起来,并在画布类中处理绘画操作。如果你有其他问题,请提供更多相关的代码或要求的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值