3.1 Subclassing QMainWindow
應用程序的主窗口是通過創建QMainWindow的派生類來完成的。QMainWindow和QDialog一樣,都是派生自QWidget。
closeEvent()是由QWidget提供的一個虛函數,在用戶關閉窗口時會被自動調用。
setCentralWidget()將某個Widget設置爲主窗口的central widget, 而central widget意味着在顯示時會佔據主窗口的中央位置。
Qt下的GUI 編程支持多種圖形格式。可以使用多種方式爲應用程序提供圖像,最常見的包括:
1). 將圖像存儲在文件中,運行時加載之。
2). 在源碼中include XPM文件(XPM文件也是合法的C++文件)。
3). 利用Qt的資源機制。
Qt的資源機制比之運行時加載更方便,並對所有支持的圖像格式都能良好工作。
爲了利用Qt的資源機制,需要創建一個資源文件,並在.pro文件中對應添加一行來對資源文件進行標識。例如:
RESOURCES= spreadsheet.qrc
資源文件本身採用了簡單的XML格式。它被編譯進程序的可執行文件,因此不會被丟失。在對資源進行定位時,使用路徑前綴" :/" ,例如“ :/images/icon.png " 。資源本身可以是任何類型的文件。
3.2 Creating Menus and Toolbars
Qt通過引入Action這一概念簡化了對menu和toolbar的編程。一個Action可以被添加到任意數量menu和toobar中。
在Qt中對menu和toolbar的編程涉及到三個步驟:
1). 創建並設置Action
2). 創建menu,並在其中添加Action
3). 創建toolbar,並在其中添加Action
Action的創建是通過QAction類來實現的,對每個Action,可以爲其設置accelerator,parent,shortcut key, 可見性以及status tip等屬性,並可以通過調用connect()爲ACtion設置被觸發要執行的操作。
QTableWidget的基類QAbstraceItemView提供了selectAll()這個slot。
QApplication類提供了aboutQt()這個slot,可以通過全局變量qApp(一個類型爲QApplication *的指針)來使用之。
在Qt中,menu由QMenu類的實例表示。而Qmenu是要被放入QMenuBar之中的。函數QMainWindow::menuBar()返回一個類型爲QMenuBar * 的指針。QMenuBar::addMenu()根據指定文本創建一個QMenu widget並將其添加進MenuBar中。QMenu::addAction() 則爲Menu添加Action。
任意Qt Widget都可以具備相關的一系列QAction。通過調用QWidget::addAction() ,可以爲Widget添加Action。這一特性可用來創建上下文菜單。
3.3 Setting Up the Status Bar
QMainWindow::statusBar() 返回一個指向status bar的指針;status bar 在statusBar()第一次被調用時被創建。
3.4 Implementing The Menu
QMessageBox::Defalut修飾符使得被修飾的Button成爲默認Button,而QMessage::Escape修飾符則使得Esc鍵自動觸發被修飾的Button。
QMessageBox::warning()用於彈出提示對話框。該函數屬於Qt提供的static convenicence function
static convenience function
QFileDialog::getOpenFileName() 可用於從用戶處獲得文件名--該函數彈出一個文件選擇對話框,要求用戶選擇一個文件,並返回文件名,或者在用戶選擇" Cancel" 時返回空字符串。該函數的第一個參數是其parent widget。對於dialog和其他widget,parent-child關係的意味是不完全相同的。一個dialog永遠是一個獨立的窗口,但是如果它擁有parent,則默認在parent之上居中顯示。
當用戶發出關閉窗口的操作時,Qwidget::close() 這個slot會被調用,該slot向對應的widget發送close event。重新實現QWidget::closeEvent()能夠攔截這個event,以便確定是否真的要關閉窗口,防止誤操作。
每個QWidget都有一個windowModified屬性,在窗口文檔被修改時應該被設爲True,否則被設爲false。
QString::arg() 函數將字符串中編號最低的" %n" 用參數進行替換,並返回替換後的字符串。
每個Action都可以擁有一個類型爲QVariant的關聯數據。
Qt中的qobject_cast< T> () 機制對於動態庫也可以正常工作。
3.5 Using Dialog
modeless window--one that runs independently of any other windows in the application
對於modeless dialog ,當其被彈出時,可能處於三種情況:
1). 這是該對話框第一次被激活
2). 該對話框之前曾被激活,但用戶又將其關閉
3). 該對話框之前曾被激活,而且仍可見
show() 將一個隱藏窗口變爲可見,而activateWIndow()則將窗口的狀態變爲active。
model window--pops up when invoked and blocks the application,preventing any other processing or interactions until it is closed.
一個dialog若是用show()來激活,則是modeless dialog;若通過exec()來激活,則是model dialog。此外,還可以調用setModel()來設置dialog的顯示模式。
QDialog::exec() 的返回至在dialog被確認時爲true,否則爲false。
在棧上創建 model dialog是一種良好的編程慣例,因爲在使用完後就不再需要,而model dialog會在作用域結束後自動被銷燬。
由於多數應用程序的About box 都是高度雷同的,Qt中提供了一個方便的static convenicence function QMessage::about(),該函數和QMessageBox::warning()很相似。
3.6 Storing Setting
Qt中是通過QSettings類來將應用程序的設置信息存儲到平臺相關的位置--windows下存入註冊表中,unix中存在文本文件中。
QSettings的構造函數包含兩個參數,分別是organization's name 和 application's name ,Qt使用這兩個參數來對應用程序的設置信息進行定位。
QSettings以key-value pair的形式存儲信息。
3.7 Multiple Documents
要想實現多文檔程序,首先必須要通過new在堆上創建主窗口,而不是在棧上創建主窗口。
QAplication::closeAllWindows() 這個slot完成的操作是關閉應用程序所有的窗口,除非其中某個窗口拒絕了close event。程序員不需要擔心未保存的修改,因爲這會由QWidget::closeEvent()負責處理。
通過在MainWindow的構造函數中調用setAttribute()函數來設置Qt::WA_DeleteOnClose屬性,可以要求Qt在窗口被關閉時將其自動銷燬。
Qt在其可用所有平臺上都支持SDI和MDI程序的創建。
3.8 Splash Screnns
在Qt中爲程序添加splash screen非常簡單,可通過QSplashScreen類來實現。
通常情況下,與splash screen相關的代碼都放在main()中,出現在調用QApplication::exec()之前。
《C++.GUI.Programming.with.Qt.4》讀書筆記Chapter 3
Chapter 3 Creating Main Windows
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.