現在,我們將給出有關 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 開頭的鏈接,那麼就會自動調用系統默認的郵件處理程序。
本文出自 “豆子空間” 博客,請務必保留此出處http://devbean.blog.51cto.com/448512/516696