临汾推广型网站建设,sydney wordpress,青岛室内设计学校,找地推平台Notepad 是一个文本编辑器小软件#xff0c;用来替代windows自带的记事本。然而Notepad软件的作者是台湾省人#xff0c;其具有明显的gd/jd/td倾向#xff0c;如果你不赞同他的观点#xff0c;Notepad将会在你的源码里面插入随机字符。推荐一款国产的开源跨平台软件NDD(not… Notepad 是一个文本编辑器小软件用来替代windows自带的记事本。然而Notepad软件的作者是台湾省人其具有明显的gd/jd/td倾向如果你不赞同他的观点Notepad将会在你的源码里面插入随机字符。推荐一款国产的开源跨平台软件NDD(notepad--)功能一点儿不弱,体积小巧打开速度快且带有文件夹比对功能连收费的beyondCompare都省了。且可以为它贡献插件啦添加一些有意思的功能比如我想给它添加个ChatGPT聊天机器人插件。期待更多优秀的国产软件为国产化崛起贡献力量。 NDDnotepad--介绍
Notepad–是一个使用C编写的文本编辑器目前支持Win/Linux/Mac平台。在gitee上的项目名称为NDD。
gitee仓库地址
https://gitee.com/cxasm/notepad--
目标是要进行文本编辑类软件的国产可替代重点在国产Uos/Linux系统、Mac 系统上发展。
一个支持windows/linux/mac的文本编辑器目标是要国产替换同类软件来自中国。对比其它竞品Notepad类软件而言优势是可以跨平台支持linux mac操作系统。 可直接下载使用发布版的软件下载地址
https://gitee.com/cxasm/notepad--/releases/tag/v1.21
msvc工具链下载安装
Microsoft C Build Tools通过可编写脚本的独立安装程序提供 MSVC 工具集无需使用 Visual Studio。 如果从命令行界面例如持续集成工作流中生成面向 Windows 的 C 库和应用程序 推荐使用此工具。
为什么使用msvc工具因为Visual Studio太大啦好几个G且我已安装过一个版本了不想再安装一个新版本了。编译NDD源码的需注意QT框架需要5.11以上。c编译器至少需要支持c17以上才行。直接下载msvc工具链1G左右大小且下载速度超快。
msvc工具链下载地址
Microsoft C Build Tools - Visual Studio 安装这个需要注意的是一定要勾选用于Windows的c Cmake工具这一项。 NDD源码编译
虽然NDD发布版提供了现成的软件可以用但是对于开发来说开发的插件必须使用同一套的MSVC和QT版本才行VS2019和QT5.15.2否则容易出现兼容性问题对于开发测试插件来说直接连ndd源码也一块儿编译最简单直接。且最终想要贡献插件时也不用担心作者鼓励大家定做插件热门插件会给你合并进发布版中。
源码编译比较简单作者提供的有编译文档介绍windows下推荐编译环境vs2017及以上qt tool 插件。这里介绍下使用cmake编译也很简单在源码的how_build目录里有CMakeLists.txt文件拷贝到项目根目录中设置好cmake环境就可以直接编译了。
cmake_minimum_required(VERSION 3.16)
project(NotePad-- VERSION 1.22.0)set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)add_definitions(-DCMAKE_CXX_STANDARD17
)set(CMAKE_PREFIX_PATH D:/Qt5.12.11/Qt5.12.11/5.12.11/msvc2015_64/lib/cmake)find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets Concurrent Network PrintSupport XmlPatterns)# qscint 关键依赖库
add_subdirectory(${PROJECT_SOURCE_DIR}/src/qscint)# 插件库包含
# helloworld 动态插件库
add_subdirectory(${PROJECT_SOURCE_DIR}/src/plugin/helloworld)# win下需要开启UNICODE进行支持TCHAR
if(CMAKE_HOST_WIN32)add_definitions(-D_UNICODE -DUNICODE)
endif()if(${PLUGIN_EN})if(${PLUGIN_EN} STREQUAL on)add_definitions(-DNO_PLUGIN1)endif(${PLUGIN_EN})
endif()file(GLOB UI_SRC ${PROJECT_SOURCE_DIR}/src/*.ui)
set(UI_SRC ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/cceditor/ccnotepad.ui)
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC)
aux_source_directory(${PROJECT_SOURCE_DIR}/src/cceditor SRC)if(CMAKE_HOST_WIN32)
# 添加 WIN32 保证主程序启动没有命令行list(APPEND WIN_RCS ${PROJECT_SOURCE_DIR}/src/RealCompareToMinGw.rc)add_executable(${PROJECT_NAME} WIN32 ${WIN_RCS} ${SRC} ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/RealCompare.qrc)
else()add_executable(${PROJECT_NAME} ${SRC} ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/RealCompare.qrc)
endif()target_include_directories(${PROJECT_NAME} PRIVATE
${PROJECT_SOURCE_DIR}/src
${PROJECT_SOURCE_DIR}/src/cceditor${PROJECT_SOURCE_DIR}/src/qscint/src
${PROJECT_SOURCE_DIR}/src/qscint/src/Qsci
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/src
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/include
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/lexlib
${PROJECT_SOURCE_DIR}/src/qscint/scintilla/boostregex
)target_link_libraries(${PROJECT_NAME} qscint Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Concurrent Qt5::Network Qt5::PrintSupport Qt5::XmlPatterns)# set(PROJECT_BINARY_DIR ${PROJECT_BINARY_DIR}/bin)
# set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)if(CMAKE_HOST_UNIX)install(TARGETS ${PROJECT_NAME}DESTINATION bin)install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/linux/usrDESTINATION /)include(${PROJECT_SOURCE_DIR}/cmake/deb_package_config.cmake) include(CPack)
elseif(CMAKE_HOST_WIN32)install(TARGETS ${PROJECT_NAME}DESTINATION /)install(DIRECTORY ${PROJECT_SOURCE_DIR}/build/bin/DESTINATION /)# 设置软件版本set(CPACK_PACKAGE_NAME NotePad--)set(CPACK_PACKAGE_DESCRIPTION NotePad--)set(CPACK_PACKAGE_COPYRIGHT Copyright (c) 2023)set(CPACK_PACKAGE_VERSION 1.22.0)set(CPACK_PACKAGE_VERSION_MAJOR 1)set(CPACK_PACKAGE_VERSION_MINOR 22)set(CPACK_PACKAGE_VERSION_PATCH 0)#include(${PROJECT_SOURCE_DIR}/cmake/nsis_package_config.cmake)include(CPack)
endif()NDD插件demo及编译
插件的制作和编译作者提供的有插件编程开发说明文档。这里介绍下cmake的编译方法相对更简单些。插件需要依赖qscintila静态库先编译出qscintila静态库。源码notepad--\src\qscint文件夹CmakeLists.txt文件几乎不用咋改动即可成功编译。需要注意的是
set(CMAKE_PREFIX_PATH D:/Qt5.12.11/Qt5.12.11/5.12.11/msvc2015_64/lib/cmake)
add_definitions(-DBOOST_REGEX_STANDALONE)
增加-DBOOST_REGEX_STANDALONE这个宏定义否则还需要依赖Boost库。加上这个可独立编译成功啦。
cmake_minimum_required(VERSION 3.16)
project(qscint CXX)set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)set(CMAKE_PREFIX_PATH D:/Qt5.12.11/Qt5.12.11/5.12.11/msvc2015_64/lib/cmake)
add_definitions(-DBOOST_REGEX_STANDALONE)
find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets Concurrent Network PrintSupport)aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC)
aux_source_directory(${PROJECT_SOURCE_DIR}/scintilla/lexers SRC)
aux_source_directory(${PROJECT_SOURCE_DIR}/scintilla/lexlib SRC)
aux_source_directory(${PROJECT_SOURCE_DIR}/scintilla/src SRC)
aux_source_directory(${PROJECT_SOURCE_DIR}/scintilla/boostregex SRC)file(GLOB MOC_HEADER ${PROJECT_SOURCE_DIR}/src/Qsci/*.h)#message(${MOC_HEADER})add_library(${PROJECT_NAME} STATIC ${SRC} ${MOC_HEADER})# add_definitions(-DQSCINTILLA_MAKE_DLL)
# add_library(${PROJECT_NAME} SHARED ${SRC} ${MOC_HEADER})target_compile_definitions(${PROJECT_NAME} PRIVATE SCINTILLA_QT SCI_LEXER INCLUDE_DEPRECATED_FEATURES)target_include_directories(${PROJECT_NAME} PRIVATE
${PROJECT_SOURCE_DIR}/scintilla/lexlib
${PROJECT_SOURCE_DIR}/scintilla/boostregex
)target_include_directories(${PROJECT_NAME} PUBLIC
${PROJECT_SOURCE_DIR}/src
${PROJECT_SOURCE_DIR}/src/Qsci
${PROJECT_SOURCE_DIR}/scintilla/src
${PROJECT_SOURCE_DIR}/scintilla/include)target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Concurrent Qt5::Network Qt5::PrintSupport)if(${CMAKE_BUILD_TYPE} STREQUAL Release)set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME qmyedit_qt5)
else()set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME qmyedit_qt5d)
endif()
插件demo
#include qobject.h
#include qstring.h
#include pluginGl.h
#include functional
#include qsciscintilla.h
#include qttestclass.h
#include NDDMyPlugin.h#define NDD_EXPORTDLL#if defined(Q_OS_WIN)#if defined(NDD_EXPORTDLL)#define NDD_EXPORT __declspec(dllexport)#else#define NDD_EXPORT __declspec(dllimport)#endif
#else#define NDD_EXPORT __attribute__((visibility(default)))
#endif#ifdef __cplusplusextern C {
#endifNDD_EXPORT bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pProcData);NDD_EXPORT int NDD_PROC_MAIN(QWidget* pNotepad, const QString strFileName, std::functionQsciScintilla* ()getCurEdit, NDD_PROC_DATA* procData);#ifdef __cplusplus}
#endif
NDDMyPlugin *nddMyPlugin nullptr;
static NDD_PROC_DATA s_procData;
static QWidget* s_pMainNotepad nullptr;
std::functionQsciScintilla* () s_getCurEdit;bool NDD_PROC_IDENTIFY(NDD_PROC_DATA* pProcData)
{if(pProcData NULL){return false;}pProcData-m_strPlugName QObject::tr(Hello World Plug);pProcData-m_strComment QObject::tr(char to Upper.);pProcData-m_version QString(v1.0);pProcData-m_auther QString(yangqq.xyz);pProcData-m_menuType 1;return true;
}//则点击菜单栏按钮时会自动调用到该插件的入口点函数。
//pNotepad:就是CCNotepad的主界面指针
//strFileName:当前插件DLL的全路径如果不关心则可以不使用
//getCurEdit:从NDD主程序传递过来的仿函数通过该函数获取当前编辑框操作对象QsciScintilla
//pProcData:如果pProcData-m_menuType 0 ,则该指针为空如果pProcData-m_menuType 1则该指针有值。目前需要关心s_procData.m_rootMenu
//开发者可以在该菜单下面自行创建二级菜单
int NDD_PROC_MAIN(QWidget* pNotepad, const QString strFileName, std::functionQsciScintilla*()getCurEdit, NDD_PROC_DATA* pProcData)
{QsciScintilla* pEdit getCurEdit();if (pEdit nullptr){return -1;}//务必拷贝一份pProcData在外面会释放。if (pProcData ! nullptr){s_procData *pProcData;}s_pMainNotepad pNotepad;s_getCurEdit getCurEdit;//如果pProcData-m_menuType 1;是自己要创建二级菜单的场景。则通过s_procData.m_rootMenu 获取该插件的菜单根节点。//插件开发者自行在s_procData.m_rootMenu下添加新的二级菜单项目//QMenu* menu s_procData.m_rootMenu;if (!nddMyPlugin){nddMyPlugin new NDDMyPlugin(s_pMainNotepad, strFileName, nullptr, s_pMainNotepad);nddMyPlugin-getViewMenu(s_procData.m_rootMenu);nddMyPlugin-setScintilla(s_getCurEdit);}return 0;
}附cmake
cmake_minimum_required(VERSION 3.16)
project(helloworld)set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)set(CMAKE_PREFIX_PATH D:/Qt5.12.11/Qt5.12.11/5.12.11/msvc2015_64/lib/cmake)find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets Concurrent Network PrintSupport XmlPatterns)add_definitions(-D_UNICODE -DUNICODE)file(GLOB UI_SRC ${PROJECT_SOURCE_DIR}/*.ui)
file(GLOB SRC ${PROJECT_SOURCE_DIR}/*.cpp)
file(GLOB MOC_HEADER ${PROJECT_SOURCE_DIR}/*.h)
# add_executable(${PROJECT_NAME} ${IS_WIN} ${SRC} ${UI_SRC} ${PROJECT_SOURCE_DIR}/src/RealCompare.qrc)
#link_directories(
# ${CMAKE_CURRENT_SOURCE_DIR}/
#)
find_library(QSCINT_LIB qmyedit_qt5 PATH ${CMAKE_CURRENT_SOURCE_DIR}/)add_library(${PROJECT_NAME} SHARED ${SRC} ${UI_SRC} ${MOC_HEADER})target_include_directories(${PROJECT_NAME} PRIVATE
${PROJECT_SOURCE_DIR}${PROJECT_SOURCE_DIR}/../../include
${PROJECT_SOURCE_DIR}/../../qscint/src
${PROJECT_SOURCE_DIR}/../../qscint/src/Qsci
${PROJECT_SOURCE_DIR}/../../qscint/scintilla/src
${PROJECT_SOURCE_DIR}/../../qscint/scintilla/include
${PROJECT_SOURCE_DIR}/../../qscint/scintilla/lexlib
${PROJECT_SOURCE_DIR}/../../qscint/scintilla/boostregex
)#set(QS_CINT_LIB ${CMAKE_CURRENT_SOURCE_DIR}/qmyedit_qt5.lib)#target_link_libraries(${PROJECT_NAME} PRIVATE
# debug qmyedit_qt5_d
# optimized qmyedit_qt5)target_link_libraries(${PROJECT_NAME} PRIVATE ${QSCINT_LIB} Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Concurrent Qt5::Network Qt5::PrintSupport Qt5::XmlPatterns)
其他资源
cmake核心知识点整理_cmake file(glob_今耕明收的博客-CSDN博客