Octave為GNU項目下的開源軟件,旨在解決線性和非線性數值計算問題。本書由淺入深,全面講解基于Octave軟件編寫GUI應用的開發技術,幫助讀者盡快掌握Octave GUI應用的技巧。 本書共8章,層次分明,將GUI與面向對象相結合,從基礎到實戰,內容循序漸進。本書提供大量實戰內容,從經典GUI應用設計實戰到系統設計實戰,配合在項目中的開發方式,將大型GUI應用的開發過程化繁為簡。 本書適合各種基礎的讀者,沒有接觸過GUI應用開發的讀者可以通過本書快速入門,接觸過GUI應用開發的讀者也可以通過本書提升GUI應用的開發能力。
本書基于Octave軟件編寫GUI應用的開發技術,并突出編寫開發的實戰部分,使讀者可以邊學邊練,更輕松地學會Octave GUI應用開發技術。
本書適合各種階段的開發者學習,既涉及GUI設計的理念等入門內容,又涉及多種難度的、Octave GUI應用開發的實戰內容。
本書的實戰內容配有豐富的代碼,并包含幾百個代碼文件,還包含作者編寫的一部分底層代碼文件。讀者可根據需要在日后的Octave GUI應用開發過程當中使用這部分代碼文件。
Octave作為一款先進的、開源的科學計算軟件,可開發的應用適用于非常多的場景。在實際應用中,除了有以命令行方式操作的CLI應用外,還有以GUI方式操作的GUI應用。GUI應用擁有圖形用戶界面,可供用戶通過可視化的交互操作控制應用運行,例如在CLI應用中輸入的命令可以在GUI應用中用單擊按鈕的方式代替,因此GUI應用擁有操作方便和界面美觀等優點,所以學會開發GUI應用對于軟件開發者而言有非常重要的意義。
本書基于Octave軟件編寫GUI應用的開發技術,并突出編寫開發的實戰部分,使讀者可以邊學邊練,更輕松地學會Octave GUI應用開發技術。本書適合各層次的讀者,既涉及GUI設計的理念等入門內容,又涉及多種難度的、Octave GUI應用開發的實戰內容,相信讀者在閱讀本書后可以學習、鞏固并提高Octave GUI應用開發技術。
本書共8章,主要內容如下:
第1章講解Octave在GUI應用開發方面的相關內容。
第2章講解GUI的基本設計原理、面向對象設計理念、如何使用面向對象設計的思想設計GUI應用及老式類和新式類的技術要點。本章對于GUI設計具有前導作用,帶領讀者快速領會GUI設計的基本概念和基于Octave的GUI設計的實施方法。
第3章講解通用句柄操作、和句柄組相關的函數及如何判斷繪圖句柄。
第4章講解Octave的圖形對象與句柄的內在聯系、創建和查詢句柄、圖形對象的概念、圖形對象的默認屬性及如何對默認屬性進行修改。Octave可以通過句柄將代碼對GUI做出的改動傳遞到圖形對象上,進而影響圖形對象在屏幕上呈現的效果等不同行為。在理解可以修改的屬性后,讀者可以靈活地在GUI上設計圖形對象的顯示效果、單擊動作等,以豐富GUI的功能,并改進GUI,使其更加美觀、大氣并符合用戶的操作習慣。
第5章講解不同用途的GUI功能函數,包括用于生成特定功能的GUI窗口的功能函數及GUI應用的運行控制函數。GUI功能函數不限于和使用句柄控制的圖形對象相關的函數,而更貼近于在Octave和操作系統之間直接進行GUI操作。本章要求讀者對操作系統有一定程度的理解。
第6章講解5個經典GUI應用的實戰內容,包括計算器、記事本、日歷、PDF閱讀器及天氣預報客戶端,帶領讀者在經典中學習一般難度的GUI的設計與實現方法。這5個應用的實戰內容在設計方法上各具代表性,每個應用需要注意的設計難點各有不同,因此它們沒有嚴格的先后順序,讀者也可以按照自己需要的順序進行閱讀。
第7章講解1個大型GUI應用的實戰內容,在項目中帶領讀者將最終的GUI應用進行分塊開發,理解在開發過程中的抽象概念并落地。
第8章講解1個以多個GUI應用為客戶端的分布式系統解決方案實戰內容,在項目中帶領讀者學習現代系統的設計與實現、在多個GUI應用之間協同的數據處理和如何用GUI應用對接服務器端。GUI在現代系統中有著至關重要的作用,而現代系統在配合GUI后更可以簡化用戶的操作并改善使用體驗。本章將重點放在系統的設計與實現上,目的是讓讀者更容易感受到在GUI背后的系統組件,進而更容易理解GUI操作的實際意義。
本書的實戰內容配有豐富的代碼,并包含幾百個代碼文件,還包含筆者編寫的一部分底層代碼文件。讀者在理解代碼后,掃描下方二維碼可下載這部分代碼文件,并根據需要在日后的Octave GUI應用開發過程中使用這部分代碼文件。
本書源代碼
限于本人的水平和經驗,書中難免存在疏漏之處,懇請專家與讀者批評指正。
于紅博2023年5月于長沙
于紅博,曾在某世界500強公司擔任測試開發工程師,參與內部框架的維護和開發。主要涉及科學計算、圖像處理、自動化系統設計、模式識別、神經網絡等分支的算法設計和程序設計領域。在業余時間愛好編寫、審閱及完善開源軟件,對于開源軟件的發展做出了一定的貢獻。
第1章緒論
第2章GUI與面向對象
2.1GUI設計原理
2.1.1GUI分類
2.1.2GUI控件
2.1.3原型設計
2.2面向對象設計理念
2.3老式類
2.4新式類
2.4.1類文件夾
2.4.2初始化一個類
2.4.3構造方法
2.4.4構造方法的返回值
2.4.5類方法
2.4.6繼承
2.4.7實例變量中的字段
2.4.8字段索引
2.4.9字段賦值
2.4.10下標索引
2.4.11方法重載
2.4.12優先級函數
2.4.13運算符重載
2.4.14類的通用工具函數
2.5老式類和新式類的區別
第3章常用句柄操作
3.1通用句柄操作
3.1.1返回句柄
3.1.2句柄強制類型轉換
3.1.3句柄復制
3.1.4獲得句柄
3.1.5設置句柄
3.1.6查找非隱藏的句柄
3.1.7查找全部句柄
3.1.8重置句柄
3.1.9查找可見的圖形
3.2句柄組
3.2.1創建句柄組
3.2.2增加句柄鍵參數
3.2.3綁定監聽器
3.2.4解綁監聽器
3.2.5連接句柄鍵參數
3.2.6連接軸對象范圍
3.3判斷繪圖句柄
3.3.1判斷圖形句柄
3.3.2通過類型判斷圖形句柄
3.3.3判斷圖形句柄或Java
對象
3.3.4判斷坐標軸句柄
3.3.5判斷圖像句柄
第4章圖形對象與句柄
4.1根對象與句柄
4.1.1根對象
4.1.2根對象句柄
4.1.3默認根對象屬性
4.2圖像對象與句柄
4.2.1圖像對象
4.2.2圖像對象句柄
4.2.3默認圖像對象屬性
4.3軸對象與句柄
4.3.1軸對象
4.3.2軸對象句柄
4.3.3默認軸對象屬性
4.4圖線對象與句柄
4.4.1圖線對象
4.4.2圖線對象句柄
4.4.3默認圖線對象屬性
4.5圖例對象與句柄
4.5.1圖例對象
4.5.2圖例對象句柄
4.5.3默認圖例對象屬性
4.6文本對象與句柄
4.6.1文本對象
4.6.2文本對象句柄
4.6.3默認文本對象屬性
4.7位圖對象與句柄
4.7.1位圖對象
4.7.2位圖對象句柄
4.7.3默認位圖對象屬性
4.8補丁對象與句柄
4.8.1補丁對象
4.8.2補丁對象句柄
4.8.3默認補丁對象屬性
4.9面對象與句柄
4.9.1面對象
4.9.2面對象句柄
4.9.3默認面對象屬性
4.10光源對象與句柄
4.10.1光源對象
4.10.2光源對象句柄
4.10.3默認光源對象屬性
4.11面板對象與句柄
4.11.1面板對象
4.11.2面板對象句柄
4.11.3默認面板對象屬性
4.12按鈕組對象與句柄
4.12.1按鈕組對象
4.12.2按鈕組對象句柄
4.12.3默認按鈕組對象屬性
4.13控制對象與句柄
4.13.1控制對象
4.13.2控制對象句柄
4.13.3默認控制對象屬性
4.14表格對象與句柄
4.14.1表格對象
4.14.2表格對象句柄
4.14.3默認表格對象屬性
4.15菜單對象與句柄
4.15.1菜單對象
4.15.2菜單對象句柄
4.15.3默認菜單對象屬性
4.16上下文菜單對象與句柄
4.16.1上下文菜單對象
4.16.2上下文菜單對象句柄
4.16.3默認上下文菜單對象
屬性
4.17工具欄對象與句柄
4.17.1工具欄對象
4.17.2工具欄對象句柄
4.17.3默認工具欄對象屬性
4.18工具欄按鈕對象與句柄
4.18.1工具欄按鈕對象
4.18.2工具欄按鈕對象句柄
4.18.3默認工具欄按鈕對象
屬性
4.19工具欄撥動開關對象與句柄
4.19.1工具欄撥動開關對象
4.19.2工具欄撥動開關對象
句柄
4.19.3默認工具欄撥動開關
對象屬性
4.20控制復選框對象與句柄
4.20.1控制復選框對象
4.20.2控制復選框對象句柄
4.20.3控制復選框對象屬性
4.21控制輸入框對象與句柄
4.21.1控制輸入框對象
4.21.2控制輸入框對象句柄
4.21.3控制輸入框對象屬性
4.22控制列表框對象與句柄
4.22.1控制列表框對象
4.22.2控制列表框對象句柄
4.22.3控制列表框對象屬性
4.23控制下拉菜單對象與句柄
4.23.1控制下拉菜單對象
4.23.2控制下拉菜單對象
句柄
4.23.3控制下拉菜單對象
屬性
4.24控制按鈕對象與句柄
4.24.1控制按鈕對象
4.24.2控制按鈕對象句柄
4.24.3控制按鈕對象屬性
4.25控制單選框對象與句柄
4.25.1控制單選框對象
4.25.2控制單選框對象句柄
4.25.3控制單選框對象屬性
4.26控制滾動條對象與句柄
4.26.1控制滾動條對象
4.26.2控制滾動條對象句柄
4.26.3控制滾動條對象屬性
4.27控制文本對象與句柄
4.27.1控制文本對象
4.27.2控制文本對象句柄
4.27.3控制文本對象屬性
4.28控制撥動開關對象與句柄
4.28.1控制撥動開關對象
4.28.2控制撥動開關對象
句柄
4.28.3控制撥動開關對象
屬性
第5章GUI功能函數
5.1文件管理
5.1.1文件夾選擇器
5.1.2文件選擇器
5.1.3文件保存器
5.2對話框
5.2.1錯誤對話框
5.2.2幫助對話框
5.2.3文本框對話框
5.2.4列表對話框
5.2.5信息框
5.2.6詢問對話框
5.2.7警告對話框
5.2.8自定義對話框
5.3進度條
5.4字體選擇器
5.5查詢或設置GUI數據
5.6查詢GUI相關句柄
5.7GUI功能查詢
5.8GUI運行模式查詢
5.9精確移動窗口
5.10變量編輯器
5.11暫停與恢復GUI之外的
程序執行
5.11.1暫停GUI之外的程序
執行
5.11.2恢復暫停的程序
5.11.3可自動恢復的暫停
第6章經典GUI應用實例
6.1計算器設計與實現
6.1.1計算器原型設計
6.1.2計算器視圖代碼設計
6.1.3計算器屬性代碼設計
6.1.4計算器回調函數代碼
設計
6.1.5合并回調函數
6.1.6解算器設計思想
6.2記事本設計與實現
6.2.1記事本原型設計
6.2.2記事本視圖代碼設計
6.2.3記事本屬性代碼設計
6.2.4控件尺寸自適應
6.2.5關閉窗口與刪除對象
6.2.6與刪除對象相關的回調
函數
6.2.7與文件存取相關的回調
函數
6.2.8自定義菜單項目快捷鍵
6.2.9創建多個實例
6.3日歷設計與實現
6.3.1日歷原型設計
6.3.2日歷視圖代碼設計
6.3.3日歷屬性代碼設計
6.3.4表格的自動調節列寬
6.3.5日期時間數據處理
6.3.6動態改變控件類型
6.4PDF閱讀器設計與實現
6.4.1PDF閱讀器原型設計
6.4.2PDF閱讀器視圖代碼
設計
6.4.3PDF閱讀器屬性代碼
設計
6.4.4圖像對象全屏顯示
6.4.5軸對象在顯示位圖對象
時的額外設置
6.4.6運用操作系統中的其他
軟件
6.4.7與打開PDF文件相關的
異常處理
6.4.8與打開PDF文件相關的
回調函數
6.5天氣預報客戶端設計與實現
6.5.1天氣預報客戶端原型
設計
6.5.2天氣預報客戶端視圖
代碼設計
6.5.3天氣預報客戶端常見
報錯
6.5.4天氣預報數據獲取
6.5.5天氣預報數據處理
6.5.6天氣預報客戶端表格的
更新邏輯
6.5.7天氣預報客戶端更新
時間的更新邏輯
6.5.8天氣預報客戶端屬性代碼
設計
第7章界面布局
7.1布局原理
7.1.1布局的作用
7.1.2布局與配置文件
7.1.3通過布局影響腳本的
運行效果
7.2布局類
7.3布局分類
7.3.1基本布局
7.3.2絕對布局
7.3.3相對布局
7.3.4其他布局
7.4布局內容提供者類
7.4.1基本布局內容提供者類
7.4.2絕對布局內容提供者類
7.4.3相對布局內容提供者類
7.5布局生成器類
7.5.1初始化布局生成器類
7.5.2基本布局生成器類
7.5.3絕對布局生成器類
7.5.4相對布局生成器類
7.6腳本生成器類
7.6.1腳本內容結構分析
7.6.2初始化腳本生成器類
7.6.3初始化腳本生成路徑
7.6.4初始化新的腳本文件
7.6.5生成文件頭
7.6.6生成文件尾
7.7常量的作用域
7.8用字符串代表的值
7.9字面量和符號量的選擇
7.10GUI配置文件制作器
7.10.1GUI配置文件制作器
原型設計
7.10.2GUI配置文件制作器
視圖代碼設計
7.10.3GUI配置文件制作器
屬性代碼設計
7.10.4GUI配置文件制作器
性能優化
7.10.5設置腳本屬性
7.10.6選擇要增加的布局
7.10.7增加布局
7.10.8增加圖形對象
7.10.9布局列表
7.10.10圖形對象列表
7.10.11刪除當前布局
7.10.12刪除當前圖形對象
7.10.13刷新布局列表內容
7.10.14刷新圖形對象列表
內容
7.10.15清空圖形對象列表
內容
7.10.16刷新編輯區域
7.10.17隱藏編輯區域內的
全部控件
7.10.18序列化與反序列化
7.10.19保存配置文件
7.10.20打開配置文件
7.10.21清空當前配置
7.10.22保存并生成可執行
腳本
7.10.23可視化的報錯提示
7.10.24退出GUI配置文件
制作器時的彈窗
第8章商店項目
8.1系統架構設計
8.2角色設計
8.3狀態設計
8.3.1表盤狀態的設計
8.3.2訂單狀態的設計
8.4搭建調試環境
8.4.1安裝Vagrant
8.4.2自動化安裝Fedora
虛擬機
8.4.3更換Fedora的軟件源
8.4.4打開或關閉服務的
自啟動
8.5數據結構設計
8.5.1用戶表設計
8.5.2商品表設計
8.5.3商品信息表設計
8.5.4訂單表設計
8.5.5審核表設計
8.5.6團隊表設計
8.6數據庫操作
8.6.1安裝PostgreSQL
8.6.2安裝用于連接PostgreSQL
的庫
8.6.3啟動PostgreSQL
8.6.4PostgreSQL控制工具
8.6.5PostgreSQL初始化數據庫
失敗
8.6.6PostgreSQL啟動數據庫
失敗
8.6.7PostgreSQL連接數據庫
失敗
8.6.8PostgreSQL用單用戶
模式修復數據庫
8.6.9使用數據庫客戶端連接到
PostgreSQL數據庫服
務器
8.6.10PostgreSQL查看配置
文件位置
8.6.11PostgreSQL數據庫插入
jsonb類型的數據
8.6.12PostgreSQL數據庫查詢
JSON數據
8.7用于PostgreSQL的SQL命令
8.7.1新增數據庫用戶
8.7.2建庫語句
8.7.3權限管理
8.7.4用戶數據DDL命令
8.7.5商品數據DDL命令
8.7.6商品信息數據DDL
命令
8.7.7商品訂單數據DDL
命令
8.7.8審核權限DDL和DQL
命令
8.7.9團隊DDL和DQL命令
8.7.10用戶數據DML和DQL
命令
8.7.11商品數據DML和DQL
命令
8.7.12商品信息數據DML和
DQL命令
8.7.13訂單數據DML和DQL
命令
8.7.14商品狀態DML和DQL
命令
8.7.15訂單狀態DML和DQL
命令
8.7.16審核權限DML和DQL
命令
8.7.17團隊DML和DQL
命令
8.8搜索引擎
8.8.1用PostgreSQL實現搜索
引擎功能
8.8.2基本文本匹配
8.8.3解析文檔
8.8.4解析查詢
8.8.5搜索結果排名
8.8.6加亮結果
8.9建立索引
8.9.1索引的作用
8.9.2索引的優點
8.9.3建立索引的類型
8.9.4建立索引的SQL命令
8.9.5重建索引的SQL命令
8.10API設計
8.10.1創建用戶
8.10.2修改用戶信息
8.10.3刪除用戶
8.10.4查詢用戶信息
8.10.5創建表盤信息
8.10.6修改表盤信息
8.10.7刪除表盤信息(下架)
8.10.8查詢表盤信息
8.10.9審核表盤信息(通過
審核)
8.10.10審核表盤信息(不通過
審核)
8.10.11創建訂單
8.10.12刪除訂單
8.10.13查詢訂單
8.10.14付款(下發付款
請求)
8.10.15付款(查詢付款
結果)
8.10.16退款(用戶要求
退款)
8.10.17退款(商家支持退款
要求)
8.10.18退款(商家不支持退款
要求)
8.11微服務設計
8.11.1審核微服務
8.11.2付款檢查微服務
8.11.3商品信息微服務
8.11.4訂單管理微服務
8.11.5商品管理微服務
8.11.6訂單微服務
8.11.7付款微服務
8.11.8商品微服務
8.11.9狀態微服務
8.11.10測試微服務
8.11.11用戶微服務
8.11.12UUID微服務
8.11.13圖片微服務
8.12使用Octave編寫CGI應用
8.12.1安裝CGI工具箱
8.12.2CGI類的常用方法
8.12.3CGI測試應用
8.12.4沒有安裝CGI工具箱時的
故障
8.13Octave和RESTful Web服務
8.13.1從RESTful Web服務
讀取內容
8.13.2向RESTful Web服務
寫入內容
8.13.3weboptions
8.14Apache
8.14.1安裝Apache
8.14.2啟動Apache
8.14.3訪問Apache服務器的
測試頁面
8.14.4Apache的配置文件
位置
8.14.5Apache的CGI文件夾
位置
8.15Nginx
8.15.1安裝Nginx
8.15.2啟動Nginx
8.15.3訪問Nginx服務器的
測試頁面
8.15.4Nginx的配置文件
位置
8.16Caddy
8.16.1安裝Caddy
8.16.2啟動Caddy
8.16.3訪問Caddy服務器的
測試頁面
8.16.4Caddy的配置文件
位置
8.16.5Caddy默認的站點
文件夾位置
8.16.6修改Caddy的站點
文件夾位置
8.16.7啟用Caddy的文件
服務器的功能
8.16.8訪問文件服務器的
索引頁面
8.16.9修改Caddy的端口
8.17換用HTTPS
8.18備選的文件服務器方案
8.19UUID
8.20使用Octave操作PostgreSQL
數據庫
8.20.1安裝database工具箱
8.20.2Octave連接PostgreSQL
的函數
8.20.3向PostgreSQL執行
SQL命令
8.20.4更新緩存的PostgreSQL
的數據的類型
8.20.5向PostgreSQL導入大
對象
8.20.6從PostgreSQL導出大
對象
8.20.7從PostgreSQL刪除大
對象
8.20.8查看PostgreSQL的大
對象
8.20.9連接PostgreSQL
選項的可選參數
8.20.10在PostgreSQL中執行
SQL命令選項的可選
參數
8.20.11SQL和Octave之間數據
類型的對應關系
8.20.12SQL和Octave之間數據
類型的自動判斷
8.20.138字節的時間數值
8.20.14PostgreSQL的
NULL
8.20.15數據存儲格式的轉換
策略
8.20.16PostgreSQL和Octave
之間數據類型的
對應關系
8.20.17PostgreSQL和Octave
之間數據類型的自動
判斷
8.20.18幾何的、點的數據
8.21表盤原型設計
8.21.1表盤的框架
8.21.2表盤的背景
8.21.3構成表盤的6種圖形
元素
8.22表盤制作器客戶端
8.22.1表盤制作器客戶端
原型設計
8.22.2制作界面
8.22.3表盤制作器客戶端允許
編輯的選項
8.22.4表盤制作器客戶端允許
設置的表盤信息
8.22.5表盤制作器客戶端對表
盤配置的操作
8.22.6表盤配置驗證邏輯
8.23登錄和注冊組件
8.23.1登錄和注冊組件原型
設計
8.23.2導航界面
8.23.3登錄界面
8.23.4注冊界面
8.23.5對接其他業務流程
8.24表盤上傳器客戶端
8.24.1表盤上傳器客戶端原型
設計
8.24.2配置瀏覽界面
8.24.3表盤上傳界面
8.24.4上傳狀態
8.25表盤審核器客戶端
8.25.1表盤審核器客戶端原型
設計
8.25.2商品信息界面
8.25.3搜索選項界面
8.25.4商品詳情界面
8.25.5審核權限控制
8.26表盤商店客戶端
8.26.1表盤商店客戶端原型
設計
8.26.2商店界面
8.26.3搜索選項界面
8.26.4商品詳情界面
8.26.5確認下單界面
8.26.6訂單管理界面
8.26.7訂單詳情界面
8.26.8付款界面
8.26.9手動刷新商品和訂單
8.26.10商品和訂單的刷新
方式
8.27商店后臺管理系統
8.27.1商店后臺管理系統原型
設計
8.27.2后臺管理界面
8.27.3批量操作商品或訂單
8.28表盤播放器客戶端
8.28.1表盤播放器客戶端原型
設計
8.28.2播放界面
8.28.3播放表盤動畫
8.29客戶端的搜索選項
8.29.1搜索關鍵字
8.29.2搜索結果排序
8.30商店項目框架
8.30.1商店項目框架原型
設計
8.30.2框架界面
8.30.3配置文件設計
8.30.4商店項目框架的初始化
過程
8.31數據庫集群
8.31.1數據庫集群的IP
配置
8.31.2PgpoolII的版本和
配置
8.31.3PgpoolII配置文件的
位置
8.31.4創建專門的用戶
8.31.5配置客戶端認證權限
8.31.6配置后端連接
8.31.7配置負載均衡
8.31.8配置流復制
8.31.9配置看門狗
8.31.10配置虛擬IP
8.31.11配置存活情況檢查
8.31.12啟動PgpoolII
8.31.13查看從機是否成功
加入集群
8.31.14安裝pgmemcache
插件
8.31.15pgmemcache的配置
8.31.16pgmemcache的內置
函數
8.31.17安裝redis_fdw插件
8.31.18redis_fdw的用例
8.32Web服務器集群
8.32.1Web服務器集群的IP
地址配置
8.32.2使用rsync同步文件
8.32.3同步微服務
8.32.4配置Web服務器集群的
虛擬IP地址
8.32.5安裝keepalived
8.32.6通過keepalived綁定
虛擬IP地址
8.32.7管理keepalived服務
8.32.8配置Web服務器集群的
負載均衡
8.32.9負載均衡和虛擬IP
地址配合使用
8.33文件服務器集群
8.33.1文件服務器集群的IP
地址配置
8.33.2NFS從安裝到配置
8.34主備網關
8.35配置memcached緩存
8.36配置Redis緩存