讓你的Qt桌面程式看上去更加native(六):跨平臺技術
現在,我們將給出有關 Qt 的一些跨平臺技術。利用這些技術,能夠讓你的應用程式看起來更加符合平臺的習慣。這次內容不是一個完整的例子,而是很多小的條目,希望大家瞭解到這些簡單的 tip,從而可以方便的應用到自己的程式中。很多 GUI 的問題就在於一個知道不知道。你知道,就可以很方便的實現,不知道,恐怕就會變得很笨拙。今天的目的,不在於例子,而在於讓你“知道”。
一、顯示內容修改
有時,我們需要製作一個文字編輯器。一般文字編輯器如果內容有所修改,會在標題欄有一個提示,比如增加一個 * 等。這種功能是 Qt 已經為我們提供好的。例如:
當我們在文字框中輸入文字時,視窗會顯示一個 *,表明內容已經被修改,提供使用者儲存。其實這種實現很簡單。Qt 的 setWindowTitle() 函式有一個佔位符,可以預留出 * 的位置。
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- this->setWindowTitle(“untitled [*]”);
- connect(ui->textEdit->document(), SIGNAL(modificationChanged(bool)), SLOT(setWindowModified(bool)));
- }
類似於上面的程式碼。視窗標題設定為 untitled [*],而 [*] 就是將來 * 出現的地方。最後,我們將 QTextEdit 的內容改變訊號同 setWindowModified() 槽連線起來。只要 setWindowModified() 設定為 true,那麼,這個內容改編的 * 就會自動為我們顯示出來。
二、讓程式提醒使用者
通常我們會有這麼一種需求:我們的程式只能執行一個例項。當使用者已經執行之後,如果使用者試圖再次執行同一個程式,則會讓程式有一個提醒功能。在 Windows 下是工作列的視窗圖示閃爍, Mac 下則是讓 Dash 上的圖示跳動起來:
這種功能是與平臺相關的,如果我們要編寫這樣的程式,不得不呼叫系統 API。好在 Qt 也為我們提供了這一功能,那就是 QApplication::alert() 函式。這個函式是 QApplication 類的一個 static 函式,因此,我們可以在任何位置使用。這個函式的作用就是讓你的程式有這樣的一種提醒功能。
三、系統托盤
現代作業系統一般都會有系統托盤這個功能區。Windows、KDE 等等都有,Mac 系統雖然沒有,但是有一個很類似的功能,就是在程式右上角可以浮現提示。
要實現這個功能,Qt 為我們提供了 QSystemTrayIcon 類。具體的用法,大家可以參考文件。不過需要提醒一點的是,Mac 的圖示必須是黑白兩色的。
四、獲取儲存位置
如果我們想使用自己的程式儲存檔案,一般都要有一個預設的儲存位置。一般來說,Windows 的程式往往預設是在我的文件裡面。我們如何獲取這個儲存路徑呢?Qt 有一個很方便的 QDesktopServices 類。這個類裡面有一個 static 的函式:
- QString QDesktopServices::storageLocation(StandardLocation type)
利用這個函式,我們就可以獲得比如桌面、音樂、快取等等的預設路徑。這樣,我們的程式就可以和系統統一起來了。
五、呼叫系統預設程式開啟連結
有時候我們希望用系統預設程式開啟連結。比如,呼叫預設瀏覽器開啟網頁,呼叫預設郵件客戶端傳送郵件。要實現這種功能,我們就要使用 QDesktopServices::openUrl() 這個函式。如果你要開啟以 mailto 開頭的連結,那麼就會自動呼叫系統預設的郵件處理程式。
本文轉自 FinderCheng 51CTO部落格,原文連結:
相關文章
- 讓你的Qt桌面程式看上去更加native(四):stylesheetQT
- 讓你的Qt桌面程式看上去更加native(二):StyleQT
- 讓你的Qt桌面程式看上去更加native(三):自定義styleQT
- 跨平臺技術演進
- C# 跨平臺UI 技術C#UI
- APP跨平臺開發技術分析APP
- 跨平臺開發技術簡介!
- Qt學習之路(59): 編寫跨平臺的程式薦QT
- QT6跨平臺開發QT
- 移動跨平臺技術方案總結
- 移動開發的跨平臺技術演進移動開發
- 跨平臺技術演進及Flutter未來Flutter
- DeepL翻譯工具,讓你的跨語言交流更加順暢
- 跨平臺socket通訊系統橋接技術的討論橋接
- 讓你的文章閱讀翻倍,跨平臺寫作必備神器!
- 一個使用Go語言和現代Web技術構建跨平臺桌面應用程式開源專案GoWeb
- 使用Electron構建跨平臺的桌面應用
- 聖誕節到了!!你的桌面下雪了嗎?? - Qt趣味開發之讓你的桌面下雪QT
- Flutter:移動端跨平臺技術演進之路Flutter
- 移動端跨平臺技術之下的變與不變
- 聊聊移動端跨平臺開發的各種技術
- DSL-讓你的 Ruby 程式碼更加優雅
- 如何讓你的JavaScript程式碼更加語義化JavaScript
- 如何讓你的Python程式碼更加pythonic ?Python
- 跨平臺介面開發除了QT還有啥QT
- 讓你的C++程式碼變的更加健壯C++
- 12_QT跨平臺執行之使用QT控制蜂鳴器QT
- 11_QT跨平臺執行之把QT程式交叉編譯到ARM開發板QT編譯
- 跨平臺開發之React Native初體驗React Native
- 想讓你的程式碼變得更加優雅嗎?
- 從 React Native 到 Flutter,移動跨平臺方案的真相React NativeFlutter
- 璞華易構:真正的低程式碼平臺,讓業務處理更加自由自在
- 推薦一個可以讓 go 程式跨平臺簡單部署的包Go
- Flutter 基礎(一)移動開發的跨平臺技術演進Flutter移動開發
- ?【Alibaba工具型技術系列】「EasyExcel技術專題」摒除OOM!讓你的Excel操作變得更加優雅和安全ExcelOOM
- 農民伯伯的福利到了,AR技術讓種地更加easy
- NativeScript3.0.1釋出,Native跨平臺應用
- Qt-跨平臺的C++圖形使用者介面應用程式框架(一)QTC++框架