13.QT-QMainWindow組件使用


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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM