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

如今,咱們將給出有關 Qt 的一些跨平臺技術。利用這些技術,可以讓你的應用程序看起來更加符合平臺的習慣。此次內容不是一個完整的例子,而是不少小的條目,但願你們瞭解到這些簡單的 tip,從而能夠方便的應用到本身的程序中。不少 GUI 的問題就在於一個知道不知道。你知道,就能夠很方便的實現,不知道,恐怕就會變得很笨拙。今天的目的,不在於例子,而在於讓你「知道」。瀏覽器

1、顯示內容修改緩存

有時,咱們須要製做一個文本編輯器。通常文本編輯器若是內容有所修改,會在標題欄有一個提示,好比增長一個 * 等。這種功能是 Qt 已經爲咱們提供好的。例如:編輯器

當咱們在文本框中輸入文字時,窗口會顯示一個 *,代表內容已經被修改,提供用戶保存。其實這種實現很簡單。Qt 的 setWindowTitle() 函數有一個佔位符,能夠預留出 * 的位置。ide

  
  
           
  
  
  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,那麼,這個內容改編的 * 就會自動爲咱們顯示出來。函數

2、讓程序提醒用戶ui

一般咱們會有這麼一種需求:咱們的程序只能運行一個實例。當用戶已經運行以後,若是用戶試圖再次運行同一個程序,則會讓程序有一個提醒功能。在 Windows 下是任務欄的窗口圖標閃爍, Mac 下則是讓 Dash 上的圖標跳動起來:this

這種功能是與平臺相關的,若是咱們要編寫這樣的程序,不得不調用系統 API。好在 Qt 也爲咱們提供了這一功能,那就是 QApplication::alert() 函數。這個函數是 QApplication 類的一個 static 函數,所以,咱們能夠在任何位置使用。這個函數的做用就是讓你的程序有這樣的一種提醒功能。spa

3、系統托盤操作系統

現代操做系統通常都會有系統托盤這個功能區。Windows、KDE 等等都有,Mac 系統雖然沒有,可是有一個很相似的功能,就是在程序右上角能夠浮現提示。3d

要實現這個功能,Qt 爲咱們提供了 QSystemTrayIcon 類。具體的用法,你們能夠參考文檔。不過須要提醒一點的是,Mac 的圖標必須是黑白兩色的。

4、獲取存儲位置

若是咱們想使用本身的程序保存文件,通常都要有一個默認的存儲位置。通常來講,Windows 的程序每每默認是在個人文檔裏面。咱們如何獲取這個存儲路徑呢?Qt 有一個很方便的 QDesktopServices 類。這個類裏面有一個 static 的函數:

  
  
           
  
  
  1. QString QDesktopServices::storageLocation(StandardLocation type) 

利用這個函數,咱們就能夠得到好比桌面、音樂、緩存等等的默認路徑。這樣,咱們的程序就能夠和系通通一塊兒來了。

5、調用系統默認程序打開連接

有時候咱們但願用系統默認程序打開連接。好比,調用默認瀏覽器打開網頁,調用默認郵件客戶端發送郵件。要實現這種功能,咱們就要使用 QDesktopServices::openUrl() 這個函數。若是你要打開以 mailto 開頭的連接,那麼就會自動調用系統默認的郵件處理程序。

相關文章
相關標籤/搜索