📄 menutool.h
字号:
#ifndef __MENUTOOL_H__#define __MENUTOOL_H__#include <QObject>#include <QMap>#include <QMultiMap>#include <QStringList>#include "invalidmenuexception.h"class QAction;class QIcon;class QMainWindow;class QMenu;class QMenuBar;class QPixmap;class QWidget;class QWidget;namespace gui {class ToolBar;class ToolButton;class IconCache;/** Separator of fields in menu definition */const char MENUDEF_SEPARATOR=',';/** Separator of items in menu list */const char MENULIST_SEPARATOR=',';/** Separator of items in list of existing toolbars */const char TOOLBARLIST_SEPARATOR=',';/** Mapping from items to action */typedef QMap<void*, QString> ActionItemsMap;/** Toolbar list type: mapping from toolbar name to toolbar object */typedef QMap<QString, ToolBar*> ToolBarList;/** Mapping from accel name to widget that have this accel */typedef QMap<QString, QString> AccelList;/** Cache of already defined menu items (some menus may be used on more than one place) */typedef QMap<QString, QMenu*> MenuCache;/** List of already used accelerators for specific popup menu */typedef QMap<QMenu*, QString> MenuAccels;/** Cache of already defined menu items (names) */typedef QMap<QString, QString> MenuNames;/** Value type for MenuItems type*/typedef std::pair<QMenu*,QAction*> MenuItemsValue;/** Pointer to of all items by item or "item class" name - menu items */typedef QMultiMap<QString,MenuItemsValue> MenuItems;/** Pointer to of all items by item or "item class" name - toolbar items */typedef QMultiMap<QString,QWidget*> ToolbarItems;/** This class manages Menu, Toolbars and Shortcuts.<br> Menus, menu items, toolbars and toolbar items share the same namespace and often menu and toolbar items are interchangable (only difference is that toolbar item must have icon, while menu item can be without an icon)<br> \brief Menu and Toolbar management*/class MenuTool : public QObject { Q_OBJECTpublic: static void setRoots(const QString &menuRoot, const QString &menuRootAppend); MenuTool(QMainWindow *_main); virtual ~MenuTool(); QMenuBar* loadMenu(QWidget *parent) throw (InvalidMenuException); QMenu* createPopup(const QString &name); ToolBarList loadToolBars(const QString& settingName="gui/toolbars") throw (InvalidMenuException); ToolBar* getToolbar(const QString &name); QStringList getToolbarList(); static QString pop(QStringList::ConstIterator &it,const QStringList::ConstIterator &end); void saveToolbars(const QString& settingName="gui/toolbarpos"); void restoreToolbars(const QString& settingName="gui/toolbarpos"); static char getAccel(const QString &name); static QString readItem(const QString &name) throw (InvalidMenuException); static bool isList(const QString &line); static QString parseName(QString &line, const QString &name=QString::null) throw (InvalidMenuException); const QIcon* getIconSet(const QString &name); const QPixmap* getIcon(const QString &name); void loadItem(const QString &name,QMenuBar *parent) throw (InvalidMenuException); void loadItem(const QString &name,QMenu *parent=NULL,QStringList prev=QStringList()) throw (InvalidMenuException); void loadItem(const QString &name,QMenu *parent=NULL,QMenuBar *parentMb=NULL,QStringList prev=QStringList()) throw (InvalidMenuException); static bool chopCommand(QString &line, const QString &command); static void invalidItem(const QString &type,const QString &name,const QString &line,const QString &expected=QString::null) throw (InvalidMenuException); void enableByName(const QString &name,bool enable); void checkByName(const QString &name,bool check); void showByName(const QString &name,bool show); void createItem(const QString &parentName,const QString &name,const QString &caption,const QString &action,const QString &accel=QString::null,const QString &icon=QString::null,const QStringList &classes=QStringList()) throw (InvalidMenuException); void setTextByName(const QString &name,const QString &newText); void setIconByName(const QString &name,const QString &newIcon); QString getTextByName(const QString &name); void reset(); void reload(); void reloadIconCache();public slots: void setButtonSize(int sz); void receiveHelpText(const QString &message); void menuActivated(QAction *item); void itemActivated(ToolButton *item);signals: /** Signal emitted to toolbars when request to resize toolbar buttons is received @param sz new size of toolbar buttons */ void updateButtonSize(int sz); /** Signal emitted when some action using menu items or toolbar buttons is invoked @param action Invoked action */ void action(const QString &action); /** Signal emitted when help text is updated @param message sent help text */ void helpText(const QString &message);protected: virtual QWidget* specialItem(ToolBar *tb,const QString &item,QMainWindow *mainWindow);private: QString getAction(void *item); void setAction(void *item, const QString &action); QString menuItemText(const QString &caption,const QString &name); QString toolTipText(const QString &text,const QString &name,QString accel=QString::null); ToolButton* createToolBarItem(ToolBar *tb,const QString &name,const QString &text,const QString &action, const QString &accel,const QString &icon, const QStringList &classes=QStringList()); void addToMap(const QString &name,QWidget* item); void addToMap(const QString &name,QMenu* parent,QAction *itemId); void addItem(QString line,QMenu *parent,const QString &name=QString::null) throw (InvalidMenuException); QAction* addItem(QMenu *parent,const QString &name,const QString &caption,const QString &action,const QString &accel=QString::null,const QString &icon=QString::null,const QStringList &classes=QStringList()) throw (InvalidMenuException); bool reserveAccel(const QString &accelDef,const QString &action); int addAction(const QString &action); void loadItemsDef(QString line,QMenu *menu,QStringList prev=QStringList()) throw (InvalidMenuException); void loadItemsDef(QString line,QMenuBar *menu) throw (InvalidMenuException); void loadItems(const QString &name,QMenu *menu,QStringList prev=QStringList()) throw (InvalidMenuException); void loadItems(const QString &name,QMenuBar *menu) throw (InvalidMenuException); void loadToolBarItem(ToolBar *tb,const QString &item) throw (InvalidMenuException); ToolBar* loadToolbar(const QString &name,bool visible=true) throw (InvalidMenuException); void optimizeItems(QMenu *menu);private: /** Mapping between menu items and actions */ ActionItemsMap action_items_map; /** List of loaded toolbars names */ QStringList toolbarNames; /** List of loaded toolbars */ ToolBarList toolbarList; /** List of installed accelerators */ AccelList accels; /** Text for item by its name */ QMap<QString, QString> itemText; /** Name of icon for item by its name */ QMap<QString, QString> itemIcon; /** Accelerator for item by its name */ QMap<QString, QString> accelText; /** Cache for menu items */ MenuCache mCache; /** Cache for popup menus */ MenuCache popups; /** List of used menu accels */ MenuAccels mAccel; /** Cache for icons */ IconCache *cache; /** Main application window */ QMainWindow *mainWindow; /** Pointer to of all items by item or "item class" name - menu items */ MenuItems mapMenu; /** Pointer to of all items by item or "item class" name - toolbar items */ ToolbarItems mapTool; /** The main menu bar */ QMenuBar *menubar;};} // namespace gui#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -