文本编辑器创建菜单栏
生活随笔
收集整理的這篇文章主要介紹了
文本编辑器创建菜单栏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 文本編輯器創建菜單欄
1 文本編輯器創建菜單欄
基于QMainWindow開發一款文本編輯器,首先實現創建菜單欄的代碼:
項目文件構成如下:
MainWindow.h:
MainWindow.cpp:
#include "MainWindow.h" #include <QMenu>MainWindow::MainWindow() {}MainWindow* MainWindow::NewInstance() {MainWindow* ret = new MainWindow();if( (ret == NULL) || !ret->construct() ){delete ret;ret = NULL;}return ret; }bool MainWindow::construct() {bool ret = true;ret = ret && initMenuBar();return ret; }bool MainWindow::initMenuBar() {bool ret = true;QMenuBar* mb = menuBar();ret = ret && initFileMenu(mb);ret = ret && initEditMenu(mb);ret = ret && initFormatMenu(mb);ret = ret && initViewMenu(mb);ret = ret && initHelpMenu(mb);return ret; }bool MainWindow::initFileMenu(QMenuBar* mb) {QMenu* menu = new QMenu("File(&F)");bool ret = (menu != NULL);if( ret ){QAction* action = NULL;ret = ret && makeAction(action, "New(&N)", Qt::CTRL + Qt::Key_N);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "Open(&O)...", Qt::CTRL + Qt::Key_O);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "Save(&S)", Qt::CTRL + Qt::Key_S);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "Save As(&A)...", 0);if( ret ){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Print(&P)...", Qt::CTRL + Qt::Key_P);if( ret ){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Exit(&X)", 0);if( ret ){menu->addAction(action);}}if( ret ){mb->addMenu(menu);}else{delete menu;}return ret; }bool MainWindow::initEditMenu(QMenuBar* mb) {QMenu* menu = new QMenu("Edit(&E)");bool ret = (menu != NULL);if( ret ){QAction* action = NULL;ret = ret && makeAction(action, "Undo(&U)", Qt::CTRL + Qt::Key_Z);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "Redo(&R)...", Qt::CTRL + Qt::Key_Y);if( ret ){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Cut(&T)", Qt::CTRL + Qt::Key_X);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "Copy(&C)...", Qt::CTRL + Qt::Key_C);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "Paste(&P)...", Qt::CTRL + Qt::Key_V);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "Delete(&L)", Qt::Key_Delete);if( ret ){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Find(&F)...", Qt::CTRL + Qt::Key_F);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "Replace(&R)...", Qt::CTRL + Qt::Key_H);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "Goto(&G)...", Qt::CTRL + Qt::Key_G);if( ret ){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Select All(&A)", Qt::CTRL + Qt::Key_A);if( ret ){menu->addAction(action);}}if( ret ){mb->addMenu(menu);}else{delete menu;}return ret; }bool MainWindow::initFormatMenu(QMenuBar* mb) {QMenu* menu = new QMenu("Format(&O)");bool ret = (menu != NULL);if( ret ){QAction* action = NULL;ret = ret && makeAction(action, "Auto Wrap(&W)", 0);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "Font(&F)...", 0);if( ret ){menu->addAction(action);}}if( ret ){mb->addMenu(menu);}else{delete menu;}return ret; }bool MainWindow::initViewMenu(QMenuBar* mb) {QMenu* menu = new QMenu("View(&V)");bool ret = (menu != NULL);if( ret ){QAction* action = NULL;ret = ret && makeAction(action, "Tool Bar(&T)", 0);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "Status Bar(&S)", 0);if( ret ){menu->addAction(action);}}if( ret ){mb->addMenu(menu);}else{delete menu;}return ret; }bool MainWindow::initHelpMenu(QMenuBar* mb) {QMenu* menu = new QMenu("Help(&H)");bool ret = (menu != NULL);if( ret ){QAction* action = NULL;ret = ret && makeAction(action, "User Manual", 0);if( ret ){menu->addAction(action);}ret = ret && makeAction(action, "About NotePad...", 0);if( ret ){menu->addAction(action);}}if( ret ){mb->addMenu(menu);}else{delete menu;}return ret; }bool MainWindow::makeAction(QAction*& action, QString text, int key) {bool ret = true;action = new QAction(text, NULL);if( action != NULL ){action->setShortcut(QKeySequence(key));}else{ret = false;}return ret; }MainWindow::~MainWindow() {}main.cpp:
#include <QtGui/QApplication> #include "MainWindow.h"int main(int argc, char *argv[]) {QApplication a(argc, argv);MainWindow* w = MainWindow::NewInstance();int ret = -1;if( w != NULL ){w->show();ret = a.exec();}delete w;return ret; }參考資料:
總結
以上是生活随笔為你收集整理的文本编辑器创建菜单栏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建设工程施工过程中的不可抗力事件包括(
- 下一篇: 一行代码实现strlen