1. 程式人生 > 實用技巧 >Qt 用程式碼實現選單欄(MenuBar)和工具欄(ToolBar)

Qt 用程式碼實現選單欄(MenuBar)和工具欄(ToolBar)

新建Qt專案,選擇Qt Widgets Application,填入專案名稱“ImageView”,點選完成。

在Qt Designer裡會生成如圖所示的幾個檔案:

此時我們右鍵刪除imageviewer.ui這個檔案,因為我們本次是用純程式碼的方式生成介面,所以不需要這個ui檔案了。

關鍵程式碼主要在imageviewer.h和imageviewer.cpp裡。下面是程式碼:

imageviewer.h

 1 #ifndef IMAGEVIEWER_H
 2 #define IMAGEVIEWER_H
 3  
 4 #include <QMainWindow>
 5 #include <QLabel>
 6
#include <QScrollArea> 7 #include <QMenu> 8 #include <QMenuBar> 9 #include <QToolBar> 10 11 namespace Ui { 12 class ImageViewer; 13 } 14 15 class ImageViewer : public QMainWindow 16 { 17 Q_OBJECT 18 19 public: 20 explicit ImageViewer(QWidget *parent = nullptr);
21 ~ImageViewer(); 22 23 void initMenu(); 24 void initToolBar(); 25 void initConnect(); 26 27 private: 28 Ui::ImageViewer *ui; 29 QLabel *imageLabel; 30 QScrollArea *scrollAera; 31 32 QMenu *fileMenu; 33 QMenu *viewMenu; 34 QMenu *helpMenu; 35 36 QToolBar *fileToolBar;
37 38 QAction *openAct; 39 QAction *printAct; 40 QAction *exitAct; 41 QAction *zoomInAct; 42 QAction *zoomOutAct; 43 QAction *normalSizeAct; 44 QAction *fitToWindowAct; 45 QAction *aboutAct; 46 QAction *aboutQtAct; 47 48 private slots: 49 void open(); 50 void print(); 51 void exit(); 52 void zoomIn(); 53 void zoomOut(); 54 void normalSize(); 55 void fitToWindow(); 56 void about(); 57 void aboutQt(); 58 }; 59 60 #endif // IMAGEVIEWER_H

imageviewer.cpp

  1 #include "imageviewer.h"
  2 #include "ui_imageviewer.h"
  3  
  4 ImageViewer::ImageViewer(QWidget *parent) :
  5     QMainWindow(parent),
  6     ui(new Ui::ImageViewer)
  7 {
  8     ui->setupUi(this);
  9  
 10     //initalize
 11     initMenu();
 12     initToolBar();
 13     initConnect();
 14 }
 15  
 16 ImageViewer::~ImageViewer()
 17 {
 18     delete ui;
 19 }
 20  
 21 void ImageViewer::initMenu()
 22 {
 23     //QMenuBar *menuBar = this->menuBar();
 24     //add three menus
 25     fileMenu = new QMenu(tr("&File"),this);
 26     viewMenu = new QMenu(tr("&View"),this);
 27     helpMenu = new QMenu(tr("&About"),this);
 28  
 29     //add actions and add it into corresponding menu
 30     openAct = new QAction(tr("&Open"),this);
 31     openAct -> setShortcut(tr("ctrl+O"));
 32     printAct = new QAction(tr("&Print"),this);
 33     printAct -> setShortcut(tr("ctrl+P"));
 34     exitAct = new QAction(tr("&Exit"),this);
 35     exitAct -> setShortcut(tr("ctrl+Q"));
 36     fileMenu -> addAction(openAct);
 37     fileMenu -> addAction(printAct);
 38     fileMenu -> addSeparator();
 39     fileMenu -> addAction(exitAct);
 40  
 41     zoomInAct = new QAction(tr("Zoom &In"),this);
 42     zoomInAct -> setShortcut(tr("ctrl+="));
 43     zoomOutAct = new QAction(tr("Zoom &Out"),this);
 44     zoomOutAct -> setShortcut(tr("ctrl+-"));
 45     normalSizeAct = new QAction(tr("&Normal Size"),this);
 46     normalSizeAct -> setShortcut(tr("ctrl+S"));
 47     fitToWindowAct = new QAction(tr("&Fit to Window"),this);
 48     fitToWindowAct -> setShortcut(tr("ctrl+F"));
 49     viewMenu -> addAction(zoomInAct);
 50     viewMenu -> addAction(zoomOutAct);
 51     viewMenu -> addAction(normalSizeAct);
 52     viewMenu -> addSeparator();
 53     viewMenu -> addAction(fitToWindowAct);
 54  
 55     aboutAct = new QAction(tr("&About"),this);
 56     aboutQtAct = new QAction(tr("&About Qt"),this);
 57     helpMenu -> addAction(aboutAct);
 58     helpMenu -> addAction(aboutQtAct);
 59  
 60     //add menus to menubar
 61     menuBar() -> addMenu(fileMenu);
 62     menuBar() -> addMenu(viewMenu);
 63     menuBar() -> addMenu(helpMenu);
 64 }
 65  
 66 void ImageViewer::initToolBar()
 67 {
 68     //add a toolbar and add its actions
 69      fileToolBar = new QToolBar(this);
 70  
 71      fileToolBar -> addAction(openAct);
 72      fileToolBar -> addAction(printAct);
 73      fileToolBar -> addAction(exitAct);
 74  
 75      addToolBar(Qt::TopToolBarArea,fileToolBar);
 76 }
 77  
 78 void ImageViewer::initConnect()
 79 {
 80     //singals and slots
 81     connect(openAct,SIGNAL(triggered),this,SLOT(open()));
 82     connect(printAct,SIGNAL(triggered),this,SLOT(print()));
 83     connect(exitAct,SIGNAL(triggered),this,SLOT(exit()));
 84     connect(zoomInAct,SIGNAL(triggered),this,SLOT(zoomIn()));
 85     connect(zoomOutAct,SIGNAL(triggered),this,SLOT(zoomOut()));
 86     connect(normalSizeAct,SIGNAL(triggered),this,SLOT(normalSize()));
 87     connect(fitToWindowAct,SIGNAL(triggered),this,SLOT(fitToWindow()));
 88     connect(aboutAct,SIGNAL(triggered),this,SLOT(about()));
 89     connect(aboutQtAct,SIGNAL(triggered),this,SLOT(aboutQt()));
 90 }
 91  
 92 //implement slot functions
 93 void ImageViewer::open()
 94 {
 95  
 96 }
 97  
 98 void ImageViewer::print()
 99 {
100  
101 }
102  
103 void ImageViewer::exit()
104 {
105  
106 }
107  
108 void ImageViewer::zoomIn()
109 {
110  
111 }
112  
113 void ImageViewer::zoomOut()
114 {
115  
116 }
117  
118 void ImageViewer::normalSize()
119 {
120  
121 }
122  
123 void ImageViewer::fitToWindow()
124 {
125  
126 }
127  
128 void ImageViewer::about()
129 {
130  
131 }
132  
133 void ImageViewer::aboutQt()
134 {
135  
136 }

介面效果如圖: