精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用springboot開發流程使用的接口完成流程的業務功能

倩倩 ? 來源:CSDN ? 作者:CSDN ? 2022-09-08 10:46 ? 次閱讀


總覽

  • 使用flowable自帶的flowable-ui制作流程圖
  • 使用springboot開發流程使用的接口完成流程的業務功能

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

一、flowable-ui部署運行

flowable-6.6.0 運行 官方demo

參考文檔:

https://flowable.com/open-source/docs/bpmn/ch14-Applications/

1、從官網下載flowable-6.6.0 : https://github.com/flowable/flowable-engine/releases/download/flowable-6.6.0/flowable-6.6.0.zip

2、將壓縮包中的 flowable-6.6.0warsflowable-ui.war 丟到Tomcat中跑起來

3、打開http://localhost:8080/flowable-ui 用賬戶:admin/test 登錄

86d98cbc-2f1f-11ed-ba43-dac502259ad0.png

4、進入APP.MODELER創建流程,之后可以導出流程到項目中使用,或者配置apache-tomcat-9.0.37webappsflowable-uiWEB-INFclassesflowable-default.properties連接本地數據庫

86e7b74c-2f1f-11ed-ba43-dac502259ad0.png

注意:需要將java驅動jar(mysql-connector-java-5.1.45.jar)復制到 apache-tomcat-9.0.37webappsflowable-restWEB-INFlib

這樣創建的流程后端程序就能直接使用

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://gitee.com/zhijiantianya/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

二、繪制流程圖

871cc6d0-2f1f-11ed-ba43-dac502259ad0.png

根據業務需要在 flowable-ui>APP.MODELER里面繪制流程圖,示例如上圖。先解釋一些概念。

  • 事件(event) 通常用于為流程生命周期中發生的事情建模,圖里是【開始、結束】兩個圈。
  • 順序流(sequence flow) 是流程中兩個元素間的連接器。圖里是【箭頭線段】。
  • 網關(gateway) 用于控制執行的流向。圖里是【菱形(中間有X)】
  • 用戶任務(user task) 用于對需要人工執行的任務進行建模。圖里是【矩形】。

簡單的工作流大概就這些元素(還有很多這里就不擴展了)。下面描述一下工作流是如何流動的。

首先啟動了工作流后,由【開始】節點自動流向【學生】節點,等待該任務執行。任務被分配的學生用戶執行后流向 【老師】節點,再次等待該任務執行。被分配的老師用戶執行后流向 【網關】,網關以此檢查每個出口,流向符合條件的任務,比如這里老師執行任務時是同意,就流向【校長】節點,等待該任務執行。執行后跟老師類似,同意后就流向【結束】節點,整個流程到此結束。

繪圖細節:

1、保留流程模型

873903cc-2f1f-11ed-ba43-dac502259ad0.png

2、順序流可以設置流條件來限制流動,比如上面的網關出口就設置了條件

87533fbc-2f1f-11ed-ba43-dac502259ad0.png

3、任務需要分配任務的執行用戶,可以分配到候選組,也可以直接分配到候選人

87602952-2f1f-11ed-ba43-dac502259ad0.png

最后導出工作流文件

876b5b56-2f1f-11ed-ba43-dac502259ad0.png

文件內容


<definitionsxmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:xsi="http://www.w3.org/2001/XMLSchema-insmtece"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:flowable="http://flowable.org/bpmn"xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"typeLanguage="http://www.w3.org/2001/XMLSchema"expressionLanguage="http://www.w3.org/1999/XPath"targetNamespace="http://www.flowable.org/processdef">
<processid="leave_approval"name="請假審批"isExecutable="true">
<startEventid="start"name="開始"flowable:initiator="startuser"flowable:formFieldValidation="true">startEvent>
<userTaskid="stu_task"name="學生"flowable:candidateGroups="stu_group"flowable:formFieldValidation="true">userTask>
<sequenceFlowid="flow1"sourceRef="start"targetRef="stu_task">sequenceFlow>
<userTaskid="te_task"name="老師"flowable:candidateGroups="te_group"flowable:formFieldValidation="true">userTask>
<exclusiveGatewayid="getway1"name="網關1">exclusiveGateway>
<userTaskid="mte_task"name="校長"flowable:candidateGroups="mte_group"flowable:formFieldValidation="true">userTask>
<exclusiveGatewayid="getway2"name="網關2">exclusiveGateway>
<endEventid="end"name="結束">endEvent>
<sequenceFlowid="flow1"name="請假"sourceRef="stu_task"targetRef="te_task"skipExpression="${command=='agree'}">sequenceFlow>
<sequenceFlowid="flow3_1"name="同意"sourceRef="getway1"targetRef="mte_task">
<conditionExpressionxsi:type="tFormalExpression">conditionExpression>
sequenceFlow>
<sequenceFlowid="flow2"name="審批"sourceRef="te_task"targetRef="getway1">sequenceFlow>
<sequenceFlowid="flow3_2"name="拒絕"sourceRef="getway1"targetRef="stu_task">
<conditionExpressionxsi:type="tFormalExpression">conditionExpression>
sequenceFlow>
<sequenceFlowid="flow4"name="審批"sourceRef="mte_task"targetRef="getway2">sequenceFlow>
<sequenceFlowid="flow4_1"name="同意"sourceRef="getway2"targetRef="end"skipExpression="${command=='free'}">
<conditionExpressionxsi:type="tFormalExpression">conditionExpression>
sequenceFlow>
<sequenceFlowid="flow4_2"name="拒絕"sourceRef="getway2"targetRef="stu_task">
<conditionExpressionxsi:type="tFormalExpression">conditionExpression>
sequenceFlow>
process>
<bpmndi:BPMNDiagramid="BPMNDiagram_leave_approval">
這里先省略
bpmndi:BPMNDiagram>
definitions>

4、bpmn文件導入

如果需要,可以把這個流程文件下載下來,直接導入使用

8788cb64-2f1f-11ed-ba43-dac502259ad0.png

三、后臺項目搭建

后臺項目基于jdk8,使用springboot框架

spring 版本

<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.3.0.RELEASEversion>
<relativePath/>
parent>

項目依賴pom.xml

<dependency>
<groupId>org.flowablegroupId>
<artifactId>flowable-spring-boot-starterartifactId>
<version>6.6.0version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.45version>
dependency>

項目配置application.yml

spring:
datasource:
url:jdbc//localhost:3306/flowable?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
driver-class-name:com.mysql.jdbc.Driver
username:root
password:123456

四、數據庫

1、Flowable的所有數據庫表都以ACT_開頭。第二部分是說明表用途的兩字符標示符。服務API的命名也大略符合這個規則。

2、ACT_RE_: 'RE’代表repository。帶有這個前綴的表包含“靜態”信息,例如流程定義與流程資源(圖片、規則等)。

3、ACT_RU_: 'RU’代表runtime。這些表存儲運行時信息,例如流程實例(process instance)、用戶任務(user task)、變量(variable)、作業(job)等。Flowable只在流程實例運行中保存運行時數據,并在流程實例結束時刪除記錄。這樣保證運行時表小和快。

4、ACT_HI_: 'HI’代表history。這些表存儲歷史數據,例如已完成的流程實例、變量、任務等。

5、ACT_GE_: 通用數據。在多處使用。

1)通用數據表(2個)

  • act_ge_bytearray:二進制數據表,如流程定義、流程模板、流程圖的字節流文件;
  • act_ge_property:屬性數據表(不常用);

2)歷史表(8個,HistoryService接口操作的表)

  • act_hi_actinst:歷史節點表,存放流程實例運轉的各個節點信息(包含開始、結束等非任務節點);
  • act_hi_attachment:歷史附件表,存放歷史節點上傳的附件信息(不常用);
  • act_hi_comment:歷史意見表;
  • act_hi_detail:歷史詳情表,存儲節點運轉的一些信息(不常用);
  • act_hi_identitylink:歷史流程人員表,存儲流程各節點候選、辦理人員信息,常用于查詢某人或部門的已辦任務;
  • act_hi_procinst:歷史流程實例表,存儲流程實例歷史數據(包含正在運行的流程實例);
  • act_hi_taskinst:歷史流程任務表,存儲歷史任務節點;
  • act_hi_varinst:流程歷史變量表,存儲流程歷史節點的變量信息;

3)用戶相關表(4個,IdentityService接口操作的表)

  • act_id_group:用戶組信息表,對應節點選定候選組信息;
  • act_id_info:用戶擴展信息表,存儲用戶擴展信息;
  • act_id_membership:用戶與用戶組關系表;
  • act_id_user:用戶信息表,對應節點選定辦理人或候選人信息;

4)流程定義、流程模板相關表(3個,RepositoryService接口操作的表)

  • act_re_deployment:部屬信息表,存儲流程定義、模板部署信息;
  • act_re_procdef:流程定義信息表,存儲流程定義相關描述信息,但其真正內容存儲在act_ge_bytearray表中,以字節形式存儲;
  • act_re_model:流程模板信息表,存儲流程模板相關描述信息,但其真正內容存儲在act_ge_bytearray表中,以字節形式存儲;

5)流程運行時表(6個,RuntimeService接口操作的表)

  • act_ru_task:運行時流程任務節點表,存儲運行中流程的任務節點信息,重要,常用于查詢人員或部門的待辦任務時使用;
  • act_ru_event_subscr:監聽信息表,不常用;
  • act_ru_execution:運行時流程執行實例表,記錄運行中流程運行的各個分支信息(當沒有子流程時,其數據與act_ru_task表數據是一一對應的);
  • act_ru_identitylink:運行時流程人員表,重要,常用于查詢人員或部門的待辦任務時使用;
  • act_ru_job:運行時定時任務數據表,存儲流程的定時任務信息;
  • act_ru_variable:運行時流程變量數據表,存儲運行中的流程各節點的變量信息;

五、流程引擎API與服務

引擎API是與Flowable交互的最常用手段。總入口點是ProcessEngine。

87a3196a-2f1f-11ed-ba43-dac502259ad0.png

1、RepositoryService很可能是使用Flowable引擎要用的第一個服務。這個服務提供了管理與控制部署(deployments)與流程定義(process definitions)的操作。管理靜態信息,

2、RuntimeService用于啟動流程定義的新流程實例。

3、IdentityService很簡單。它用于管理(創建,更新,刪除,查詢……)組與用戶。

4、FormService是可選服務。也就是說Flowable沒有它也能很好地運行,而不必犧牲任何功能。

5、HistoryService暴露Flowable引擎收集的所有歷史數據。要提供查詢歷史數據的能力。

6、ManagementService通常在用Flowable編寫用戶應用時不需要使用。它可以讀取數據庫表與表原始數據的信息,也提供了對作業(job)的查詢與管理操作。

7、DynamicBpmnService可用于修改流程定義中的部分內容,而不需要重新部署它。例如可以修改流程定義中一個用戶任務的辦理人設置,或者修改一個服務任務中的類名。

接下來使用之前的請假流程圖,上代碼

代碼

importlombok.extern.slf4j.Slf4j;
importorg.flowable.engine.HistoryService;
importorg.flowable.engine.RepositoryService;
importorg.flowable.engine.RuntimeService;
importorg.flowable.engine.history.HistoricProcessInstance;
importorg.flowable.engine.repository.Deployment;
importorg.flowable.engine.repository.ProcessDefinition;
importorg.flowable.engine.runtime.Execution;
importorg.flowable.engine.runtime.ProcessInstance;
importorg.flowable.idm.api.Group;
importorg.flowable.idm.api.User;
importorg.flowable.task.api.Task;
importorg.flowable.task.api.history.HistoricTaskInstance;
importorg.springframework.beans.factory.annotation.Autowired;

importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importjava.util.zip.ZipInputStream;

/**
*TestFlowable
*
*@Author
*@Date:2021/10/1723:35
*@Version1.0
*/
@Slf4j
publicclassTestFlowable{

@Autowired
privateRepositoryServicerepositoryService;

@Autowired
privateRuntimeServiceruntimeService;

@Autowired
privateHistoryServicehistoryService;

@Autowired
privateorg.flowable.engine.TaskServicetaskService;

@Autowired
privateorg.flowable.engine.IdentityServiceidentityService;

publicvoidcreateDeploymentZip(){

/*
*@Date:2021/10/1723:38
*Step1:部署xml(壓縮到zip形式,直接xml需要配置相對路徑,麻煩,暫不用)
*/
try{
FilezipTemp=newFile("f:/leave_approval.bpmn20.zip");
ZipInputStreamzipInputStream=newZipInputStream(newFileInputStream(zipTemp));
Deploymentdeployment=repositoryService
.createDeployment()
.addZipInputStream(zipInputStream)
.deploy();
log.info("部署成功:{}",deployment.getId());
}catch(FileNotFoundExceptione){
e.printStackTrace();
}

/*
*@Date:2021/10/1723:40
*Step2:查詢部署的流程定義
*/
Listlist=repositoryService.createProcessDefinitionQuery().processDefinitionKey("leave_approval").list();
Listpages=repositoryService.createProcessDefinitionQuery().processDefinitionKey("leave_approval").listPage(1,30);

/*
*@Date:2021/10/1723:40
*Step3:啟動流程,創建實例
*/
StringprocessDefinitionKey="leave_approval";//流程定義的key,對應請假的流程圖
StringbusinessKey="schoolleave";//業務代碼,根據自己的業務用
MapvariablesDefinition=newHashMap<>();//流程變量,可以自定義擴充
ProcessInstanceprocessInstance=runtimeService.startProcessInstanceByKey(processDefinitionKey,businessKey,variablesDefinition);
log.info("啟動成功:{}",processInstance.getId());

/*
*@Date:2021/10/1723:40
*Step4:查詢指定流程所有啟動的實例列表
*列表,或分頁刪除
*/
Listexecutions=runtimeService.createExecutionQuery().processDefinitionKey("leave_approval").list();
ListexecutionPages=runtimeService.createExecutionQuery().processDefinitionKey("leave_approval").listPage(1,30);
//runtimeService.deleteProcessInstance(processInstanceId,deleteReason);//刪除實例

/*
*@Date:2021/10/1723:40
*Step5:學生查詢可以操作的任務,并完成任務
*/
StringcandidateGroup="stu_group";//候選組xml文件里面的flowable:candidateGroups="stu_group"
ListtaskList=taskService.createTaskQuery().taskCandidateGroup(candidateGroup).orderByTaskCreateTime().desc().list();
for(Tasktask:taskList){
//申領任務
taskService.claim(task.getId(),"my");
//完成
taskService.complete(task.getId());
}

/*
*@Date:2021/10/1723:40
*Step6:老師查詢可以操作的任務,并完成任務
*/
StringcandidateGroupTe="te_group";//候選組xml文件里面的flowable:candidateGroups="te_group"
ListtaskListTe=taskService.createTaskQuery().taskCandidateGroup(candidateGroupTe).orderByTaskCreateTime().desc().list();
for(Tasktask:taskListTe){
//申領任務
taskService.claim(task.getId(),"myte");
//完成
Mapvariables=newHashMap<>();
variables.put("command","agree");//攜帶變量,用于網關流程的條件判定,這里的條件是同意
taskService.complete(task.getId(),variables);
}

/*
*@Date:2021/10/180:17
*Step7:歷史查詢,因為一旦流程執行完畢,活動的數據都會被清空,上面查詢的接口都查不到數據,但是提供歷史查詢接口
*/
//歷史流程實例
ListhistoricProcessList=historyService.createHistoricProcessInstanceQuery().processDefinitionKey("leave_approval").list();
//歷史任務
ListhistoricTaskList=historyService.createHistoricTaskInstanceQuery().processDefinitionKey("leave_approval").list();
//實例歷史變量,任務歷史變量
//historyService.createHistoricVariableInstanceQuery().processInstanceId(processInstanceId);
//historyService.createHistoricVariableInstanceQuery().taskId(taskId);

//*****************************************************分隔符********************************************************************
//*****************************************************分隔符********************************************************************
//可能還需要的API
//移動任務,人為跳轉任務
//runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId)
//.moveActivityIdTo(currentActivityTaskId,newActivityTaskId).changeState();

//如果在數據庫配置了分組和用戶,還會用到
Listusers=identityService.createUserQuery().list();//用戶查詢,用戶id對應xml里面配置的用戶
Listgroups=identityService.createGroupQuery().list();//分組查詢,分組id對應xml里面配置的分組如stu_group,te_group在表里是id的值

//另外,每個查詢后面都可以拼條件,內置恁多查詢,包括模糊查詢,大小比較都有
}
}

五、參考資料

  • 分享牛Flowable文檔漢化:https://github.com/qiudaoke/flowable-userguide
  • 貓七姑娘 flowable-6.6.0 運行官方 demo
  • 華格瑞沙 https://www.cnblogs.com/yangjiming/p/10938515.html


審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據庫
    +關注

    關注

    7

    文章

    3767

    瀏覽量

    64279
  • 流程圖
    +關注

    關注

    2

    文章

    63

    瀏覽量

    18718
  • spring
    +關注

    關注

    0

    文章

    338

    瀏覽量

    14312
  • SpringBoot
    +關注

    關注

    0

    文章

    173

    瀏覽量

    169

原文標題:Spring Boot + flowable 完美結合,快速實現工作流

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    易控智駕正式通過汽車功能安全流程認證

    近日,易控智駕正式通過「ISO26262:2018 ASIL-D」汽車功能安全流程認證,并獲得由國際知名認證機構SGS頒發的功能安全流程認證證書。這不僅標志著易控智駕在
    的頭像 發表于 11-21 09:46 ?661次閱讀
    易控智駕正式通過汽車<b class='flag-5'>功能</b>安全<b class='flag-5'>流程</b>認證

    MCU開發流程中的注意事項

    以確保項目的順利進行和最終產品的性能、可靠性和安全性。 1. 需求分析 在開發流程的初期,需求分析是至關重要的。這一階段需要明確項目的目標、功能、性能指標和用戶需求。 明確功能需求 :
    的頭像 發表于 11-01 13:52 ?167次閱讀

    接單流程設計探索

    作者:京東物流 呂順 背景 在物流系統中,接單是信息流的關鍵和重要的一環,每個業務場景都會對應一種標準接單流程,例如銷售出、采購入等等。標準接單包括統一接口定義、統一數據模型、標準接單核心應用職責
    的頭像 發表于 10-31 10:56 ?122次閱讀
    接單<b class='flag-5'>流程</b>設計探索

    一篇講透:模組典型上網業務的AT上網流程

    ? 今天我們學習合宙模組典型上網業務的AT上網流程。 文末閱讀原文,下載最新教程/固件。 一、簡介 本文介紹了合宙4G模組的常用的AT指令和服務器交互的流程。 進一步詳細的流程,參見各
    的頭像 發表于 10-24 07:14 ?248次閱讀
    一篇講透:模組典型上網<b class='flag-5'>業務</b>的AT上網<b class='flag-5'>流程</b>

    邏輯組件中的流程塊節點通常出于什么用途

    邏輯組件中的流程塊節點是流程圖、狀態圖、序列圖等圖表中的基本元素,它們用于表示業務流程、工作流程、算法步驟、系統狀態等。這些節點在軟件開發
    的頭像 發表于 10-15 14:38 ?123次閱讀

    wms智能倉儲管理系統標準化流程

    wms智能倉儲管理系統標準化流程的標準化流程通常包括以下幾個主要步驟: 需求分析:與客戶充分溝通,了解其倉儲管理需求和業務流程,確定系統功能和特性的需求,制定系統
    的頭像 發表于 10-14 16:22 ?207次閱讀

    電機控制方案開發流程

    電機控制應用廣泛,電機控制軟件方案核心是MCU,功率器件、驅動器件;本文介紹電機控制方案開發流程與需要解決的問題。
    的頭像 發表于 10-12 16:36 ?736次閱讀
    電機控制方案<b class='flag-5'>開發</b><b class='flag-5'>流程</b>

    AWFlow:內置豐富的功能節點,簡化嵌入式開發流程

    AWFlow突破傳統C語言限制的嵌入式開發框架,通過封裝硬件驅動和系統平臺,集成通用軟件功能與通信協議,助力開發者專注于核心業務,提升效率,縮短周期,迅速適應市場變化。在傳統的嵌入式軟
    的頭像 發表于 08-09 08:25 ?263次閱讀
    AWFlow:內置豐富的<b class='flag-5'>功能</b>節點,簡化嵌入式<b class='flag-5'>開發</b><b class='flag-5'>流程</b>

    迪文串口屏ModBus開發流程

    這里接前一章節,繼續迪文屏的開發,前章主要講解基礎開發流程,此章節開始講解迪文ModBus協議棧的使用方法。前文指路:《迪文串口屏基礎GUI開發流程
    的頭像 發表于 07-19 08:21 ?439次閱讀
    迪文串口屏ModBus<b class='flag-5'>開發</b><b class='flag-5'>流程</b>

    鴻蒙原生應用元服務-訪問控制(權限)開發工作流程相關

    開發者可以參考已有的權限列表,判斷應用能否申請目標權限。 二、權限校驗的工作流程 應用在提供對外功能服務接口時,可以根據接口涉數據的敏感程
    發表于 04-19 15:27

    fpga原型驗證流程

    FPGA原型驗證流程是確保FPGA(現場可編程門陣列)設計正確性和功能性的關鍵步驟。它涵蓋了從設計實現到功能驗證的整個過程,是FPGA開發流程
    的頭像 發表于 03-15 15:05 ?1456次閱讀

    dSPACE開發流程

    電子發燒友網站提供《dSPACE開發流程.pdf》資料免費下載
    發表于 02-29 09:08 ?0次下載

    芯科科技發布新版藍牙開發流程

    查看Silicon Labs(亦稱“芯科科技”)近日發布新版的藍牙開發流程(Bluetooth Developer Journey),了解更多關于低功耗藍牙、藍牙Mesh、藍牙定位服務,以及電子貨架標簽(ESL)等設計方法,我們將概述相關應用
    的頭像 發表于 01-25 10:09 ?735次閱讀
    芯科科技發布新版藍牙<b class='flag-5'>開發</b><b class='flag-5'>流程</b>

    EDA全流程的重要意義,以及國內EDA全流程進展

    電子發燒友網報道(文/吳子鵬)EDA是Electronic design automation的縮寫,中文名稱是電子設計自動化,是指通過設計軟件來完成集成電路的功能設計、綜合、驗證、物理設計等流程
    的頭像 發表于 12-14 00:08 ?2272次閱讀

    多語言開發流程詳解

    現在不少應用都是要求有多語言切換的, 使用QT開發上位機也同樣需要做多語言功能, 不過QT是自帶了多語言翻譯功能, 可以很方便的借助原生工具進行, 下面就簡單來看看多語言開發
    的頭像 發表于 11-30 09:08 ?1057次閱讀