以下记录,在编程上设计上的问题,会持续记录:
2021/04/25
1.一个功能一定版
2.如果写共用函数库,一定不要用小众的语言等去写,如现在,界面完全用qt,逻辑,算法完全用c++写
3.避免结构冗杂,一个功能一个接口类
2021/05/18
对于项目,可分为几大块,
(1)输入输出层
通常用两个类完成,一个输入类,一个输出类,用typedef class XXX outputParam,typedef class XXXX inPutParam,其他界面调用都用这个outputParam和inputParam,这两个类最好是单例模式,通常用inputOutput
(2)核心代码底层,每一个功能使用一个类或者一个cpp文件,通常用core
(3)接口层,作为核心算法代码底层的接口,对于同一种类型的不同功能继承相同的接口,后期迭代时候只需要更改核心代码即可,通常用interface文件夹
(4)业务逻辑层,通常使用一个类写即可,比如信号生成,可以用signalGener作为一个业务逻辑层,通常用一个文件即可
(5)项目版本功能,通常用def.h,里边一个功能用一个宏定义控制,如 FOR_TEST ,FOR_FUN_CALCECHODATA,这种类似的。这些宏所影响的是输入输出参数的类型,还有核心代码底层的选择,通常用def
(6)适配层,适配不同的项目,操作系统等所使用,通过不同的宏,实例化出特定的类做适配。通常用adapt文件夹
(7)工具层,包括网络,日志,设计模式类,类型转换,时间,任务管理线程,线程,锁等等的类,通常用utils
(8)第三方的代码,通常用3rdparty的文件夹
(9)build,作为构建出程序的位置
(10)关于如何将计算好的数据传输到前端显示,这里也是通过观察者模式,当有数据时候,使用单例的输出类进行提取做为前端显示,当然这个单例输出类中做了锁操作和线程安全,也可以通过生产者消费者模式控制生成一个显示一个
关于,项目迭代有几点感悟
有几种办法
1.使用多个vcxproj,这种会使项目变得越来越冗杂
2.使用,接口不变,更改adapt中适配类的办法,通过同时更新新的core中的代码,以及apdapt中和版本功能控制def的代码实现,个人比较倾向于这一种,功能通过宏控制,方便将代码分块
以后的编程过程,也会按照这种框架分类编写了,
这就是干程序员的第三年体会出的结构
2021/05/25
QML的不显示的问题
打包问题,mingw,qml中控件不显示,更换Qtcore.dll文件,第二部,将qml中的文件拷贝到exe所在的目录下,这样基本就可以显示了
inno setup 这个软件文件夹的递归制作,只需要改一下这个desrdir
2021/06/21
Qt代理的问题
参考的网站:
QTableview常用几种代理总结_hu_linux的博客-CSDN博客_qtableview 代理
思路:
1.先设计各种代理
class Delegate : public QStyledItemDelegate{
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
void setEditorData(QWidget *editor, const QModelIndex &index) const override;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
}
2.为其中一列设置一个特定的代理
table->setItemDelegateForColumn(0,Delegate0);
table->setItemDelegateForColumn(1,Delegate1);
Qt的rect 的adjust参考:
QT之QRect函数QRect::adjust()函数解析_灵客风-CSDN博客_qrect 缩放
2021/07/08
软件设计
1.桥接模式:接口和实现分开
2.抽象工厂模式:
3. 建造者模式:
4.命令模式:多个模型计算
5.中介模式:双方通信
6.考虑每个模型成为一个组件,检查各个组件是否安装成功用visitor模式
2022/01/20
工作流开发模式
通信线程(指令者):
1.和上层ui的通信
2.和下层硬件通信
处理线程(中间层执行者):
1.业务处理,分状态,一定要根据状态想好要怎么处理,一定要每种状态定义清除
硬件处理(下层执行者):
整个软件结构可以为
ui层
处理层
管理层
中间层
CAN通信层
FPGA逻辑层
硬件层
通用化设计
日志
数据库
等通用
上层APP应用用rpc交互