QMainWindow介紹
- 主窗口是與用戶進行長時間交互的頂層窗口,比如記事本
- 主窗口通常是應用程序啟動后顯示的第一個窗口
- QMainWindow是Qt中主窗口的基類,繼承於QWidget,如下圖所示:
QMainWindow和其它類不同,如下圖所示:
QMainWindow組件布局
1.菜單欄
QT中提供了預定義的與菜單相關的類組件:
創建菜單示例:
QMenuBar mb= menuBar(); //返回菜單欄,如果菜單欄沒有創建,則返回一個空的菜單欄 QMenu* menu= new QMenu("File(&F)", QMenuBar ); //(&F):表示添加alt+F鍵快捷鍵打開這個菜單 QAction* action= new QAction("New(N)", QMenu); //(N):表示添加N鍵快捷鍵 action-> setShortcut(QKeySequence (Qt::CTRL + Qt::Key_N)); //為菜單項設置快捷鍵:ctrl+n menu->addAction(action); //向菜單里添加菜單項"New" menu->addSeparator(); //添加菜單分隔符 mb->addMenu(menu); //向菜單欄里添加菜單File
2.工具欄
- 工具欄中的元素可以是各種窗口組件(QAction,Qwidget)
- 工具欄中的元素通常以圖標方式存在,
- 以SI軟件為例,它的工具欄如下圖所示:
工具欄使用
在Qt中,通過QToolBar類來創建工具欄,然后通過QAction類來創建工具項,如下圖所示:
QToolBar關鍵成員函數
void setFloatable ( bool floatable ); //設置工具欄是否可以當做獨立的窗口,停靠在上下左右窗口旁,,默認為true void setMovable(bool movable); //設置工具欄是否可以自動移動,停靠在任意處,默認為true void setIconSize ( const QSize & iconSize ); //設置工具欄中的每個圖標大小
創建工具欄示例:
QToolBar *tb = addToolBar("ToolBar"); //將"ToolBar"插入當前工具欄區域,並返回這個QToolBar對象 QAction *action = new QAction("",QToolBar); action->setToolTip("Open"); //信息提示,當鼠標靠近這個項,便會提示信息 action->setIcon(QIcon(":/res/pic/open.png")); //設置圖標,冒號表示該文件處於資源文件指定的地方 tb->addAction(action); //將工具欄選項加入工具欄
QToolBar中可以加入任意的QWidget組件,比如:文本框(用來查找文字)
示例,在MainWindow類的構造函數里寫入:
QToolBar* tb = addToolBar("Tool Bar"); QAction* action = new QAction("",QToolBar); tb->setFloatable(false); tb->setMovable(false); action->setToolTip("Open"); action->setIcon(QIcon(":/Res/open.png")); tb->addAction(action); tb->addSeparator(); //添加間隔符 /*添加QWidget組件*/ QPushButton* b = new QPushButton("Button"); QLabel* l = new QLabel("Label",this); QLineEdit* e = new QLineEdit(this); tb->addWidget(b); tb->addWidget(l); tb->addWidget(e);
添加Qt資源文件,將open.png加入程序指定的位置處:
Qt資源文件的作用,就是告訴Qt Creator,該文件處於哪個位置
編譯運行:
3.狀態欄
- 狀態欄一般位於主窗口最底部
- 用來顯示簡要信息
顯示的信息一般分為:
-實時信息,如: 當前程序狀態
-永久信息,如: 程序版本號,機構名稱
-進度信息,如: 進度條提示,百分比提示
在Qt中,通過QStatusBar類來創建狀態欄,這個類是個容器類組件,可以包含任意QWidget類,如下圖所示:
常用函數:
QStatusBar * statusBar (); //獲取當前類的狀態欄,如果狀態欄沒有創建,則返回一個空的狀態欄 void showMessage ( const QString & message, int timeout = 0 ) ; //在狀態欄下左下部顯示信息, timeout 的單位是ms,timeout倒計時完會調用clearMessage() void clearMessage () //清除消息
創建狀態欄示例:
QStatusBar *sb = statusBar(); QLabel* status1 = new QLabel("Line: 1 Col: 1",this); QLabel* status2 = new QLabel("Lines: 0 Length: 0",this); status1->setAlignment(Qt::AlignCenter); status2->setAlignment(Qt::AlignCenter); status1->setMinimumWidth(200); //設置最小寬度,避免與旁邊的信息緊靠在一起 status2->setMinimumWidth(200); sb->addPermanentWidget(status1); sb->addPermanentWidget(status2);
效果:
文本編輯組件
QT中提供了三種文本編輯組件
- QLineEdit :單行文本編輯組件
- QTextEdit:多行富文本編輯組件(類似於word編輯,可以實現圖片,個別文字的字體,顏色等編輯)
- QPlainTextEdit:多行普通文本編輯組件(類似於記事本編輯)
Qt,在文本編輯組件里自帶了右鍵式菜單
可以實現復制,粘貼,剪切等,以QTextEdit為例:
常用函數
QMenu * QLineEdit::createStandardContextMenu(); //獲取右擊菜單內容 menu->addAction(tr("My Menu Item")); //添加右擊菜單內容 addAction(QAction *action, ActionPosition position); //可以在編輯框的開始或者末尾添加一個action,方便我們操作,一個完美的搜索框頓時出現。
以QPlainTextEdit組件為例,它的常用信號函數如下:
void textChanged (); //每當文檔的內容發生變化時,則觸發該信號,可以用來判斷文本是否被修改,以及輸入的字符是什么 void QPlainTextEdit::selectionChanged () ; //當文本框鼠標選擇改變時,觸發該信號 void QPlainTextEdit::cursorPositionChanged (); //每當光標的位置發生變化時,觸發該信號 void undoAvailable ( bool available ); //當用戶進行撤銷操作時,則觸發該信號,如果撤銷成功則available 為true void redoAvailable ( bool available ); //當用戶進行重做操作時,則觸發該信號,如果文本框為空則available 為true void blockCountChanged ( int newBlockCount ) //每當按下回車或者刪除回車(更新字符塊),則newBlockCount計數,並觸發該信號, newBlockCount 默認為1