标签:widget JFrame void 扩展 改进 QString include pointName
首先看看配置文件的改动:
{ "Extension": [ { "ExtensionPoint": { "pointName": "Logger", "pointIcon": "./images/plane.png" }, "ExtensionImpl": { "pluginName": "JLogger", "widgetName": "LoggerPanel" } }, { "ExtensionPoint": { "pointName": "Test", "pointIcon": "./images/config.png" }, "ExtensionImpl": { "pluginName": "TestPlugin", "widgetName": "Widget" } } ] }配置文件中,加入了 widgetName ,这样的话具体到了一个扩展点的实现是由具体的一个插件里面的widget! 同样很大的改动是扩展实现的逻辑是由 ActionManager 来实现,而不是由负责扩展点实现的插件来负担!
1 void ActionManager::slotTriggered(QString _aName) 2 { 3 auto _it = m_actionExtensionMap.begin(); 4 for(;_it!= m_actionExtensionMap.end(); _it++) 5 { 6 if(_it->first.pointName == _aName) 7 { 8 break; 9 } 10 } 11 12 std::shared_ptr<QWidget> _widget; 13 if(_it == m_actionExtensionMap.end()) 14 { 15 return; 16 } 17 _widget = _it->second.widget; 18 19 if(_widget.get()) 20 { 21 if(m_mainWindow->centralWidget() != _widget.get()) 22 { 23 JLogger::INFO(QString("[ %1 ] 窗体被加入到 centeralWidget!").arg(_widget->objectName())); 24 m_mainWindow->takeCentralWidget(); 25 m_mainWindow->setCentralWidget(_widget.get()); 26 } 27 } 28 }
ActionManager.h
1 #ifndef ACTIONMANAGER_H 2 #define ACTIONMANAGER_H 3 4 #include <QObject> 5 #include <QList> 6 #include <QToolBar> 7 #include <map> 8 9 #include "../JCore/jcore.h" 10 #include "jaction.h" 11 #include "IPluginInterface.h" 12 #include "jlogger.h" 13 14 class MainWindow; 15 16 // 扩展点结构体 17 struct ActionExtensionPoint 18 { 19 ActionExtensionPoint() 20 { 21 pointName = ""; 22 pointIcon = ""; 23 } 24 QString pointName; 25 QString pointIcon; 26 bool operator< (const ActionExtensionPoint &_b) const 27 { 28 return pointName < _b.pointName; 29 } 30 bool operator== (const ActionExtensionPoint &_b) const 31 { 32 return pointName == _b.pointName; 33 } 34 }; 35 36 // 扩展实现结构体 37 struct ActionExtensionImpl 38 { 39 ActionExtensionImpl() 40 { 41 pluginName = ""; 42 widgetName = ""; 43 } 44 QString pluginName; 45 QString widgetName; 46 47 std::shared_ptr<IPluginInterface> plugin; 48 std::shared_ptr<QWidget> widget; 49 }; 50 51 class ActionManager : public QObject 52 { 53 Q_OBJECT 54 public: 55 explicit ActionManager(QObject *parent = nullptr); 56 57 void initialize(MainWindow *_mainWindow, QToolBar *_mainToolBar); 58 59 private: 60 void parseExtension(); 61 void constructActions(); 62 63 private slots: 64 void slotTriggered(QString _aName); 65 66 private: 67 68 // 扩展点、扩展实现信息存放map 69 std::map<ActionExtensionPoint, ActionExtensionImpl> m_actionExtensionMap; 70 71 // 中央视图对应的 actions 72 QList<JAction*> m_centerViewActions; 73 74 MainWindow *m_mainWindow = nullptr; 75 }; 76 77 #endif // ACTIONMANAGER_H
1 void TestPlugin::initWidgets() 2 { 3 m_widget = new Widget; 4 m_widget->setObjectName("Widget"); 5 m_widgetList.append(std::shared_ptr<QWidget>(m_widget)); 6
标签:widget,JFrame,void,扩展,改进,QString,include,pointName 来源: https://www.cnblogs.com/JackZheng/p/16155448.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。