helloworldexport.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include <qobject.h>
  2. #include <qstring.h>
  3. #include <pluginGl.h>
  4. #include <functional>
  5. #include <qsciscintilla.h>
  6. #include "qttestclass.h"
  7. #define NDD_EXPORTDLL
  8. #if defined(Q_OS_WIN)
  9. #if defined(NDD_EXPORTDLL)
  10. #define NDD_EXPORT __declspec(dllexport)
  11. #else
  12. #define NDD_EXPORT __declspec(dllimport)
  13. #endif
  14. #else
  15. #define NDD_EXPORT __attribute__((visibility("default")))
  16. #endif
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. NDD_EXPORT bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pProcData);
  21. NDD_EXPORT int NDD_PROC_MAIN(QWidget* pNotepad, const QString& strFileName, std::function<QsciScintilla* ()>getCurEdit, NDD_PROC_DATA* procData);
  22. #ifdef __cplusplus
  23. }
  24. #endif
  25. static NDD_PROC_DATA s_procData;
  26. static QWidget* s_pMainNotepad = nullptr;
  27. std::function<QsciScintilla* ()> s_getCurEdit;
  28. bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pProcData)
  29. {
  30. if(pProcData == NULL)
  31. {
  32. return false;
  33. }
  34. pProcData->m_strPlugName = QObject::tr("Hello World Plug");
  35. pProcData->m_strComment = QObject::tr("char to Upper.");
  36. pProcData->m_version = QString("v1.0");
  37. pProcData->m_auther = QString("zuowei.yin");
  38. pProcData->m_menuType = 0;
  39. return true;
  40. }
  41. //则点击菜单栏按钮时,会自动调用到该插件的入口点函数。
  42. //pNotepad:就是CCNotepad的主界面指针
  43. //strFileName:当前插件DLL的全路径,如果不关心,则可以不使用
  44. //getCurEdit:从NDD主程序传递过来的仿函数,通过该函数获取当前编辑框操作对象QsciScintilla
  45. //pProcData:如果pProcData->m_menuType = 0 ,则该指针为空;如果pProcData->m_menuType = 1,则该指针有值。目前需要关心s_procData.m_rootMenu
  46. //开发者可以在该菜单下面,自行创建二级菜单
  47. int NDD_PROC_MAIN(QWidget* pNotepad, const QString &strFileName, std::function<QsciScintilla*()>getCurEdit, NDD_PROC_DATA* pProcData)
  48. {
  49. QsciScintilla* pEdit = getCurEdit();
  50. if (pEdit == nullptr)
  51. {
  52. return -1;
  53. }
  54. //务必拷贝一份pProcData,在外面会释放。
  55. if (pProcData != nullptr)
  56. {
  57. s_procData = *pProcData;
  58. }
  59. s_pMainNotepad = pNotepad;
  60. s_getCurEdit = getCurEdit;
  61. //如果pProcData->m_menuType = 1;是自己要创建二级菜单的场景。则通过s_procData.m_rootMenu 获取该插件的菜单根节点。
  62. //插件开发者自行在s_procData.m_rootMenu下添加新的二级菜单项目
  63. //做一个简单的转大写的操作
  64. QtTestClass* p = new QtTestClass(pNotepad,pEdit);
  65. //主窗口关闭时,子窗口也关闭。避免空指针操作
  66. p->setWindowFlag(Qt::Window);
  67. p->show();
  68. return 0;
  69. }