這個軟體深挖下去,可以做的東西很多,很適合練手,從初學一直到工作都能持續維護下去。
介面原型
這個軟體適合用標準的QMainWindow佈局,帶工具欄、選單欄、狀態列。
中心區域,建議用QMdiArea做成多文件檢視,每個文件用一個QMdiSubWindow子視窗表示。
軟體的後臺服務不要寫單例類,所有和文件有關的後臺類都應該允許多例項,每個文件類的成員變數裡,持有對應的QMdiSubWindow子視窗和其他輔助的功能類,然後再由QMainWindow頂層物件用容器統一持有。
軟體最好要有對照顯示功能,我建議用QSplitter把軟體分為水平兩欄,左側顯示原文(QPlainTextEdit),右側是類似word的批註欄。
批註欄
仔細閱讀QPlainTextEdit::document()的返回型別QTextDocument和它的下屬內容,透過這些可以精確標註/編輯文字段落。
因此,可以做一個選單功能,使用者選中文字後右鍵選單新增標註,根據選擇的內容,如果是一個詞語就彈窗新增詞彙,否則彈窗新增段落大意。
批註欄可以直接用QListWidget,然後新增一個QLabel進去顯示。QLabel支援html富文字格式,所以可以透過html格式來對批註內容排版。不需要專門學html,只要找一個能切換富文字和html的線上編輯器就行了,抄他們的格式,比如foxmail的簽名編輯,比如論壇回覆功能。
QTextBlock::setUserData方法可以給一個文字段落設定一個使用者自定義的資料物件,所以可以把該段落的批註物件指標列表儲存進去,然後過載QPlainTextEdit的滑鼠移動事件,使用者移動滑鼠時,檢索對應段落的批註列表,看滑鼠指向的單詞是否有批註,有就高亮右側的對應批註條目,類似word的效果。
高亮可以透過修改QFrame的邊框設定實現,QLabel繼承自QFrame。
已高亮的批註,要做一個列表快取一下,這樣移動指標更新高亮時,就順便檢索下列表裡的現有高亮批註對應的文字段落是否位於滑鼠指標下,如果不是則取消高亮,移出快取列表。
然後下面詳細說下三個功能:
1.記錄下陌生詞彙
陌生詞彙這點,需要查詢一下線上詞典的sdk,比如有道或者百度,然後用QNetworkRequest傳送HTTP請求,獲取詞條翻譯,然後解析新增到陌生詞彙的編輯對話方塊裡。
對話方塊裡,需要把各個方面分別用可編輯控制元件分別操作,包括詞性、翻譯、音標、例句,然後可以手動填寫,也可以先用線上翻譯的結果填充了再修改。
完成新增後,顯示在右側批註欄。
2.記錄下句子
這個和批註文章是一樣的,直接新建一個文件,把句子填在左邊就是了。
3.段落大意
類似功能1,選中段落右鍵新增批註後,彈出段落大意編輯視窗,窗口裡可以上下分隔,上面用QTextBrowser顯示選中段落,下面是QPlaintTextEdit輸入段落內容,完畢後同樣顯示在右側批註欄。
檔案格式
最後是檔案格式——建議參考word的格式,word其實是個壓縮包,解壓后里面是素材庫和xml描述的檔案結構。
這裡也可以仿照一下,使用bundle庫來製作壓縮包。
文字內容,暫時不需要考慮富文字,那麼就直接儲存為txt檔案。
批註內容,可以很完美的用一個xml檔案來描述,詳見Qt XML模組。XML根節點為Document,attribute裡可以新增一些作者、修改時間等輔助資訊,然後下面有一個Comments子節點存放批註列表,該節點下面每個批註用一個Comment二級子節點描述。Comment裡,透過屬性來設定關聯的段落位置(起始和結束位置),用QDomText子物件來填寫批註關聯的富文字內容(QDomText子物件就是XML裡<>和</>中間包著的文字)。
文字內容要用QByteArray::toPercentEncoding做一下轉義,避免裡面包含<>等字元,影響xml解析。
用XML描述內容結構,比起用二進位制來儲存,有個好處是,可以自由靈活的新增新的內容語法,也就是可以向後/向前相容版本。
然後把這倆打包起來,給個自用的副檔名即可。
至於最後的,如何設定exe檔案圖示,如何關聯檔案格式,這倆就和Qt無關了——這兩個是平臺特性,需要分別處理windows和linux。
Windows上,需要在.pro裡新增RC_FILE資源描述檔案,來設定圖示。
.pro裡可以有條件分支,比如:
這個軟體深挖下去,可以做的東西很多,很適合練手,從初學一直到工作都能持續維護下去。
介面原型
這個軟體適合用標準的QMainWindow佈局,帶工具欄、選單欄、狀態列。
中心區域,建議用QMdiArea做成多文件檢視,每個文件用一個QMdiSubWindow子視窗表示。
軟體的後臺服務不要寫單例類,所有和文件有關的後臺類都應該允許多例項,每個文件類的成員變數裡,持有對應的QMdiSubWindow子視窗和其他輔助的功能類,然後再由QMainWindow頂層物件用容器統一持有。
軟體最好要有對照顯示功能,我建議用QSplitter把軟體分為水平兩欄,左側顯示原文(QPlainTextEdit),右側是類似word的批註欄。
批註欄
仔細閱讀QPlainTextEdit::document()的返回型別QTextDocument和它的下屬內容,透過這些可以精確標註/編輯文字段落。
因此,可以做一個選單功能,使用者選中文字後右鍵選單新增標註,根據選擇的內容,如果是一個詞語就彈窗新增詞彙,否則彈窗新增段落大意。
批註欄可以直接用QListWidget,然後新增一個QLabel進去顯示。QLabel支援html富文字格式,所以可以透過html格式來對批註內容排版。不需要專門學html,只要找一個能切換富文字和html的線上編輯器就行了,抄他們的格式,比如foxmail的簽名編輯,比如論壇回覆功能。
QTextBlock::setUserData方法可以給一個文字段落設定一個使用者自定義的資料物件,所以可以把該段落的批註物件指標列表儲存進去,然後過載QPlainTextEdit的滑鼠移動事件,使用者移動滑鼠時,檢索對應段落的批註列表,看滑鼠指向的單詞是否有批註,有就高亮右側的對應批註條目,類似word的效果。
高亮可以透過修改QFrame的邊框設定實現,QLabel繼承自QFrame。
已高亮的批註,要做一個列表快取一下,這樣移動指標更新高亮時,就順便檢索下列表裡的現有高亮批註對應的文字段落是否位於滑鼠指標下,如果不是則取消高亮,移出快取列表。
然後下面詳細說下三個功能:
1.記錄下陌生詞彙
陌生詞彙這點,需要查詢一下線上詞典的sdk,比如有道或者百度,然後用QNetworkRequest傳送HTTP請求,獲取詞條翻譯,然後解析新增到陌生詞彙的編輯對話方塊裡。
對話方塊裡,需要把各個方面分別用可編輯控制元件分別操作,包括詞性、翻譯、音標、例句,然後可以手動填寫,也可以先用線上翻譯的結果填充了再修改。
完成新增後,顯示在右側批註欄。
2.記錄下句子
這個和批註文章是一樣的,直接新建一個文件,把句子填在左邊就是了。
3.段落大意
類似功能1,選中段落右鍵新增批註後,彈出段落大意編輯視窗,窗口裡可以上下分隔,上面用QTextBrowser顯示選中段落,下面是QPlaintTextEdit輸入段落內容,完畢後同樣顯示在右側批註欄。
檔案格式
最後是檔案格式——建議參考word的格式,word其實是個壓縮包,解壓后里面是素材庫和xml描述的檔案結構。
這裡也可以仿照一下,使用bundle庫來製作壓縮包。
文字內容,暫時不需要考慮富文字,那麼就直接儲存為txt檔案。
批註內容,可以很完美的用一個xml檔案來描述,詳見Qt XML模組。XML根節點為Document,attribute裡可以新增一些作者、修改時間等輔助資訊,然後下面有一個Comments子節點存放批註列表,該節點下面每個批註用一個Comment二級子節點描述。Comment裡,透過屬性來設定關聯的段落位置(起始和結束位置),用QDomText子物件來填寫批註關聯的富文字內容(QDomText子物件就是XML裡<>和</>中間包著的文字)。
文字內容要用QByteArray::toPercentEncoding做一下轉義,避免裡面包含<>等字元,影響xml解析。
用XML描述內容結構,比起用二進位制來儲存,有個好處是,可以自由靈活的新增新的內容語法,也就是可以向後/向前相容版本。
然後把這倆打包起來,給個自用的副檔名即可。
至於最後的,如何設定exe檔案圖示,如何關聯檔案格式,這倆就和Qt無關了——這兩個是平臺特性,需要分別處理windows和linux。
Windows上,需要在.pro裡新增RC_FILE資源描述檔案,來設定圖示。
.pro裡可以有條件分支,比如:
win32: {}unix: {}