QT基础二
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()之前。
轉載于:https://www.cnblogs.com/qq78292959/archive/2012/06/04/2534281.html
總結