Skip to content

Latest commit

 

History

69 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

熙柠剪辑UI

BY: 雷电法王杨永信(在B站名字)

抗击侵略者

在初中最后一年
只是失去了应试优势, 体育优势
而敌人就在京城
这并不意味无法反击
敌人的应试优势只是暂时
它们的欺凌更是暂时
极端复杂软件工程领域中夺回来
它们所谓应试优势, 死记硬背在这里必将脆弱不堪
让伟大长期主义胜利旗帜飞过我们头顶
2023初三九班侵略者必将彻底失败
Под знаменем Ленина двигаться к победе

介绍

此版本为UI, 没有业务逻辑,UI是纯代码布局, 你也可以学习如何使用代码来布局。
请注意: 业务逻辑的实现非常不稳定! 暂时只开源UI, 业务逻辑稳下来后再开源。
后续我会push一些测试的例子, 位于Test目录下。

项目历史:

2022年03月12日 初二时期, 熙柠游戏网站立项, 标志着熙柠系的开始
2022年04月左右 熙柠云剪辑立项
2023年08月20日 Unity引擎版本创建
2023年11月04日 UE引擎(虚幻引擎)版本创建
2023年11月30日 QT版本创建, 现存, 很早期的C++入门项目, 也是我的第一个Qt项目。
2024年04月03日 23时52分46秒 开始设计欢迎界面图片 2024年04月07日 16时28分25秒 欢迎界面图片设计完成 2025年07月14日 16时54分37秒 纯UI版分支创建

重要消息:

  1. 目前还在实现一些底层所需要的, 包括一些些小框架, 所以这个仓库将会很长一段时间不更新, 希望您知道
  2. [已放弃] 我尝试只使用Qt的QWidget模块, 其余的一律不用, 属性, 哈希表, 队列, 动态容器等等都是自己使用C语言实现的
  • 为什么放弃? 拆黑盒自己实现不是很可靠, 还是用QT提供的模块吧。
  1. 暂时先基于shotcut研发, 当前可用的熙柠剪辑forkshotcut, 是shotcut的衍生品, 逐一摸透后再自研, 避免盲人摸象, 因为网上精讲NLE底层资料的实在太少了, 啊啊啊啊啊啊啊啊啊啊!

更改日志

  • 2026-02-04 03:06:37 [大规模更改] 部分布局由工具栏取代, 以及多个细节, 啊啊啊啊啊

多快好省

2025-08-31 19:43:34提出软件版本的

  • 软件功能
  • 代码执行速度
  • 代码质量
  • 资源, 内存, 磁盘, CPU
  • 微信QQ就是反面教材, 这里引用赵本山小品里的一段: 一只公鸡要下蛋

代码规范

首先,使用Markdown编辑器或者具有Markdown功能的编辑器把规范完整的打一边, 然后, 全部删除掉, 不能按下Ctrl+Z, 立即关闭你的编辑器, 彻底的删掉
然后呢, 现在可以开始了

  1. 关键字
    • 禁止使用auto关键字
  2. 缩进
    • if语句超过三层, 说明程序开始朝不好的方向发展, 需要修复, 请尝试使用策略, 卫语句或者其他的方法来优化
    • 代码必须有缩进, 至少4个空格甚至更大, 因为更大的缩进可以让你很舒服
  3. 变量名
    • 禁止使用aa,bb,cc,abc来命名
    • 禁止使用汉语拼音来命名
    • 禁止将变量名全部大写或者全部小写, 除非使用了下划线作为分割
    • 如果你使用了上面三种方式, 说明你的程序已经严重混乱, 你必须立即进行修复, 当然, for循环等流程控制除外, 比如for (int i = 0; i < 114514; i++)
    • 正确的方法是你应该使用专有的英文名来命名并遵守命名规范
  4. 函数
    • 如果函数有返回值, 那么无论如何都要有返回值
  5. 性能
    • 你应该尽量避免线性, 特别是逐个遍历, 在遍历前, 你应该尝试寻找一种不需要遍历的处理方式, 尽可能的将时间复杂度从**o(n)降到o(log n)**来提高程序的速度, 除非只能使用遍历, 没有其他的更优方法
    • 冒泡排序法你不应该使用, 因为时间复杂度是糟糕的n的平方, 这意味着是非常低效且非常糟糕的, 你因该让快速排序Timsort高效的排序算法来取代冒泡排序
  6. 安全
    • 堆中申请的内存块, 你应该在不需要的时候释放它, 归还给操作系统, 并立即赋于NULL来避免野指针, 你务必知道: if语句无法检查出野指针的, 来看下面的例子
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      int *Number = (int *)malloc(sizeof(int)); /* 申请一块内存 */
      *Number = 114514;
      printf("%d\n", *Number); /* 正常打印是114514 */
    
      /* 然后我们释放它, 不赋为NULL */
      free(Number); /* 如果不释放, 将会引发内存泄漏, 你可以通俗理解为占着茅坑不拉屎, 造成了公共的资源浪费 */
    
      /* 判空 */
      if (!Number)
      {
          printf("无效的数字!\n"); /* 是不会打印这句话的, 因为没有赋为NULL, 这就是非常危险的野指针 */
      }
      /* 比如小明约好了你去奶茶店, 你需要找到小明, 小明告诉你地址是奶茶店门口的长椅, 你去了奶茶店, 长椅上坐的并不是小明而是其他顾客,这个小明, 又TM放我鸽子 */
    }
    • 在使用任何递归算法时, 必须进行评估, 确保不会爆栈(递归深度过大导致堆栈溢出); 如果出现爆栈, 则不应该使用递归, 而是由迭代取代递归

核心模块

主要分为四个核心模块

  1. 管理系统
  2. 编辑器
  3. 设置

项目文件(夹)结构

你务必知道: 不同的模块有着不同的协议, 以MIT居多

  • 根目录
    • [DIR] Doc
      • [DIR] RoutingArchitecture 页面路由架构
    • [DIR] Assets 资源目录
      • [DIR] Images 图片
        • [DIR] ClipHall 剪辑大厅
        • [DIR] Public 公共的
        • [DIR] Welcome 欢迎屏幕
        • [FILE] XncutClipHall.qrc 剪辑大厅资源文件
        • [FILE] XncutPublic.qrc 公共的资源文件
        • [FILE] XncutWelcome.qrc 欢迎屏幕资源文件
    • [DIR] Src 源代码目录
      • [DIR] XncutWelcome 欢迎
        • [FILE] XncutWelcomeScreen.h 欢迎屏幕
        • [FILE] XncutWelcomeScreen.cpp
      • [DIR] XncutPublicWidget 共有部件
        • [FILE] XncutListView.h 列表视图
        • [FILE] XncutListView.cpp
      • [DIR] XncutPublicStyle 公共样式
        • [FILE] XncutCustomTabStyle.h TAB样式
        • [FILE] XncutCustomTabStyle.cpp
      • [DIR] XncutClipHall 剪辑大厅
        • [FILE] XncutClipHallWidget.h 剪辑大厅部件
        • [FILE] XncutClipHallWidget.cpp
        • [FILE] XncutUserInfoWidget.h 用户信息(实际上是布局)
        • [FILE] XncutUserInfoWidget.cpp
      • [DIR] XncutProjectManager 工程管理器
        • [FILE] XncutProjectManagerWidget.h 工程管理部件
        • [FILE] XncutProjectManagerWidget.cpp
        • [FILE] XncutProjectCreateWidget.h 创建工程
        • [FILE] XncutProjectCreateWidget.cpp
        • [FILE] XncutProjectModifyWidget.h 工程管理
        • [FILE] XncutProjectModifyWidget.cpp
      • [DIR] XncutEditor 编辑器
        • [DIR] XncutTitleBar 标题栏
          • [FILE] XncutTitleBarWidget.h 标题栏部件(实际上是布局)
          • [FILE] XncutTitleBarWidget.cpp
        • [DIR] XncutBins 素材箱
          • [DIR] XncutMaterialField 素材领域
            • [FILE] XncutMaterialFieldWidget.h 素材领域部件
            • [FILE] XncutMaterialFieldWidget.cpp
          • [FILE] XncutBinsWidget.h 素材箱部件
          • [FILE] XncutBinsWidget.cpp
        • [DIR] XncutProjectMonitor 工程监视器
          • [FILE] XncutProjectMonitorWidget.h 工程监视器部件
          • [FILE] XncutProjectMonitorWidget.cpp
          • [FILE] XncutVideoWidget.h 视频部件
          • [FILE] XncutVideoWidget.cpp
        • [FILE] XncutEditorWidget.h 编辑器部件
        • [FILE] XncutEditorWidget.cpp
      • [FILE] Main.cpp 入口
      • [FILE] Xncut.h 主窗口,此文件等价于MainWindow.h
      • [FILE] Xncut.cpp
    • [DIR] Test 测试例子
      • [DIR] XncutThreeLayerLayout 三层垂直布局部件
      • [DIR] XncutAbstractTabItemView 抽象标签视图部件
      • [DIR] XncutTitleBar 标题栏 MIT协议
      • [DIR] XncutPenTool 钢笔工具
    • [DIR] Data 一些配置
    • [DIR] Doc 开发文档
    • [FILE] CMakeLists.txt Cmake的构建配置
    • [FIEL] COPYING.AGPLv3 AGPL协议
    • [FILE] README.md 就是这个

其他

  1. 喜欢的话记得点个Star吧
  2. 如果你有更好的建议,issues吧,这对我非常重要!
  3. 高中生活自由又自在,嘿嘿~
  4. 你一定要记住, 先开始, 后完美
  5. 奈何网络就是我的弱点啊, 尝试搓个网络模拟器吧, 感谢彭老师留的时间
  6. 高二的时光过的真TM快啊, 好好珍惜吧~

你不怕失败吗

哈哈, 我当然怕, 让我尝试一下, 万一成功了呢?
如果成功了, 剪映VIP是啥? Pr订阅费用是啥? 我不知道

越垃圾的地方, 规矩越多

我不同意, 在工业领域, 绝对不行,
苛刻规矩是为了守住生命线, 守住客户的信任,
如果规矩宽松, 就是拿生命开玩笑,
正所谓差之毫厘, 缪以千里,
测试场景必须覆盖全面, 少一个都不行
精度必须最高, 少一分都不行
每一条规矩的背后都是血和泪的教训
是学校啊, 那太对了.

About

A professional video editing software that only supports Linux

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages