讓你的Qt桌面程式看上去更加native(六):跨平臺技術

科技小能手發表於2017-11-23

現在,我們將給出有關 Qt 的一些跨平臺技術。利用這些技術,能夠讓你的應用程式看起來更加符合平臺的習慣。這次內容不是一個完整的例子,而是很多小的條目,希望大家瞭解到這些簡單的 tip,從而可以方便的應用到自己的程式中。很多 GUI 的問題就在於一個知道不知道。你知道,就可以很方便的實現,不知道,恐怕就會變得很笨拙。今天的目的,不在於例子,而在於讓你“知道”。

一、顯示內容修改

有時,我們需要製作一個文字編輯器。一般文字編輯器如果內容有所修改,會在標題欄有一個提示,比如增加一個 * 等。這種功能是 Qt 已經為我們提供好的。例如:

當我們在文字框中輸入文字時,視窗會顯示一個 *,表明內容已經被修改,提供使用者儲存。其實這種實現很簡單。Qt 的 setWindowTitle() 函式有一個佔位符,可以預留出 * 的位置。


  1. MainWindow::MainWindow(QWidget *parent) : 
  2.     QMainWindow(parent), 
  3.     ui(new Ui::MainWindow) 
  4.     ui->setupUi(this); 
  5.     this->setWindowTitle(“untitled [*]”); 
  6.  
  7.     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 的函式:


  1. QString QDesktopServices::storageLocation(StandardLocation type) 

利用這個函式,我們就可以獲得比如桌面、音樂、快取等等的預設路徑。這樣,我們的程式就可以和系統統一起來了。

五、呼叫系統預設程式開啟連結

有時候我們希望用系統預設程式開啟連結。比如,呼叫預設瀏覽器開啟網頁,呼叫預設郵件客戶端傳送郵件。要實現這種功能,我們就要使用 QDesktopServices::openUrl() 這個函式。如果你要開啟以 mailto 開頭的連結,那麼就會自動呼叫系統預設的郵件處理程式。

本文轉自 FinderCheng 51CTO部落格,原文連結: 

http://blog.51cto.com/devbean/516696


相關文章