文章目錄
- qt窗口--01
- 窗口概覽
- 菜單欄
- 工具欄
- 狀態欄
- 浮動窗口
- 子窗口
- 對話框
- model
- 結語
很高興和大家見面,給生活加點impetus!!開啟今天的編程之路!!
作者:?( ‘ω’ )?260
我的專欄:qt,Linux,C++進階,C++初階,數據結構初階,題海探驪,c語言
歡迎點贊,關注!!
qt窗口–01
窗口概覽
qt中窗口主要分為6類,分別是標題,菜單欄,工具欄,中央窗口,狀態欄,子窗口(鉚接控件),接下來我們來依次介紹~
菜單欄
我們直接來看示例。
示例1,我們來完成最基本的添加菜單,以及添加菜單中的項,來看代碼:
隨后我們來完成槽函數的書寫:
我們來看效果:
結論:如果菜單中的菜單項被按下,就會發送一個triggered的信號
示例2:創建快捷方式,使用快捷方式直接對菜單或菜單項進行操作。
我們還是直接引用上面的示例1:
同理,如果我們此時對于每個按鈕設置上對應的槽函數,同時連接上triggered信號,就能夠實現更多的操作~
示例三:菜單中并不是只能是菜單項,也可以是菜單。但是層數越多的話會導致用戶體驗不是很好,來看代碼:
來看結果:
及時就是類似于嵌套的形式了
示例4:設置分割線:
先來說細節:跟布局管理中講解的spacer差不多,一定要注意添加的位置。
在上述例子中,如果我們需要再文件菜單中的菜單項1和菜單項2添加分割符,我們需要寫在添加這兩個菜單項的中間,來看代碼:
示例5:我們給菜單和菜單項添加圖片,仍然是使用qrc機制+設置Icon。
這里我先給出細節:
菜單項添加了圖片文字和圖片都會顯示,菜單添加了圖片只會顯示圖片,鼠標懸停在菜單上沒有提示
來看效果:
但是,鼠標懸停提示其實也可以通過toolTip這個api接口來設置~
工具欄
我們直接來看示例:
示例1:同樣也是需要setIcon,上面的過程大致已經操作過了,我們直接來講解結論:
鼠標懸停在工具欄上的QAction會有提示的
這里我們不在演示,步驟其實是跟上面一樣的~~
示例2:上面的圖片顯示其實toolBar有四個位置,那么也就是說,ToolBar中的QAction其實是可以移動的,我們來看代碼示例:
我們來看效果:
如果此時我們鼠標懸停在此上,鼠標就會變成另外一個符號,此時我們可以拖動這個工具欄移動,此時成為可浮動狀態。
在ToolBar中,默認四個位置都是可以放的,默認QToolBar是可以浮動的,但是我們也是可以修改的~
toolbar1->setAllowedAreas(Qt::LeftToolBarArea | Qt::BottomToolBarArea);//設置只能放在左下
來看結果:
當我想放在上面時,就會發現,沒有這個藍色的條條,放下鼠標鍵就會回到原先的位置。
同理,可浮動狀態也是一樣的,先來看有可浮動狀態,默認就是有可浮動狀態的~
toolbar1->setFloatable(true);//設置是否可浮動
toolbar1->setMovable(true);//設置是否可以移動
可浮動狀態就是可以隨便放,反之就不能隨便放了
狀態欄
狀態欄主要用來信息的顯示。
所以我們使用狀態欄來顯示臨時信息,來看示例:
我們直接來看結果:
當然,為了防止多個控件在狀態欄重合到一起,addWidget函數的第一個參數是添加的控件,第二個參數是設置該控件的拉伸系數。
浮動窗口
子窗口
其實對應的就是一個鉚接部件。
我們直接來看代碼;
我們來看結果:
這里一定需要注意這點,QDockWidget該控件只能夠添加一個控件,需要添加多個控件的話需要借助Widget。
對話框
首先,對話框是什么?是進行“短平快”的操作。例如一些提示,好比是否需要保存等等。
為什么有呢?因為此時程序不知道該怎么辦了,需要用戶做進一步的決定,隨后程序才會繼續執行!!
在最開始的時候,我們學習QT選擇的是QWidget,隨后我們又學習了QMainWindow,QDialog是我們最后一個學習的屬性!因為這個只是一個對話框,創建項目的時候并不會作為一個主要開發窗口,所以我們這里仍然是創建mainWindow。
創建QDialog有兩種方式,純代碼和圖形化的方式,我們使用圖形化的方式更加簡單,操作是我們需要創建一個繼承QDialog的類的ui文件,并使用一個按鈕打開即可:
此時我們發現多出來了頭文件,源文件和ui文件。
此時我們再來具體的代碼:
為什么這里創建使用的是Dialog,而不是QDialog?
因為我使用的是Dialog繼承QDialog,直接使用QDialog的話會導致不會使用ui文件來初始化。
我們來看結果:
問題:這兩個對話框是不是同一個?答案肯定不是,因為是new出來的,地址一般都是不一樣的,但是,我們發現這個dialog并沒有delete掉,雖然掛到了對象樹上,對象數銷毀,所有內存都會歸還,但是mainWindow一直存在,那么整個進程就還會存在,對象樹還存在,這樣就會造成內存泄漏。所以我們設置了WA_DeleteOnClose屬性,,即當我們點擊dialog右上方的叉號時,該dialog就會銷毀!
model
模態/非模態。
模態:彈出對話框,只能操作該對話框,其他操作都做不了
非模態:彈出對話框,其余操作仍然能夠進行操作的
所以,模態對話框一般會用在比較關鍵的時候。而且,上面的對話框是非模態的,因為我們點擊按鈕出現了對話框,還能夠再來操作對話框之外的界面再來生成一個對話框。如果我們想要對話框是模態的,只需要將dialog->show();換成dialog->exec();即可
來看結果:
此時我還想創建一個對話框的話就不讓我繼續創建了,即此時我只能夠操作第一個創建的dialog
結語
今天的內容到此為止,不足之處歡迎留言指出,感謝大家支持!!
千磨萬擊還堅韌,任爾東西南北風!