Showing preview only (399K chars total). Download the full file or copy to clipboard to get everything.
Repository: myhhub/CTK-project
Branch: main
Commit: 6defa4ad78a7
Files: 171
Total size: 348.8 KB
Directory structure:
gitextract_mzwwt_jh/
├── EventAdmin/
│ ├── SendEvent/
│ │ ├── App/
│ │ │ ├── App.pro
│ │ │ └── main.cpp
│ │ ├── CTK.pri
│ │ ├── Plugins/
│ │ │ ├── BlogEventHandler/
│ │ │ │ ├── BlogEventHandler.pro
│ │ │ │ ├── MANIFEST.MF
│ │ │ │ ├── Resource.qrc
│ │ │ │ ├── blog_event_handler.h
│ │ │ │ ├── blog_event_handler_activator.cpp
│ │ │ │ └── blog_event_handler_activator.h
│ │ │ ├── BlogManager/
│ │ │ │ ├── BlogManager.pro
│ │ │ │ ├── MANIFEST.MF
│ │ │ │ ├── Resource.qrc
│ │ │ │ ├── blog_manager.cpp
│ │ │ │ ├── blog_manager.h
│ │ │ │ ├── blog_manager_activator.cpp
│ │ │ │ └── blog_manager_activator.h
│ │ │ └── Plugins.pro
│ │ ├── SendEvent.pro
│ │ └── SendEvent.pro.user
│ └── SignalSlot/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── Plugins/
│ │ ├── BlogEventHandlerUsingSlots/
│ │ │ ├── BlogEventHandlerUsingSlots.pro
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── blog_event_handler_using_slots.h
│ │ │ ├── blog_event_handler_using_slots_activator.cpp
│ │ │ └── blog_event_handler_using_slots_activator.h
│ │ ├── BlogManagerUsingSignals/
│ │ │ ├── BlogManagerUsingSignals.pro
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── blog_manager_using_signals.cpp
│ │ │ ├── blog_manager_using_signals.h
│ │ │ ├── blog_manager_using_signals_activator.cpp
│ │ │ └── blog_manager_using_signals_activator.h
│ │ └── Plugins.pro
│ ├── SignalSlot.pro
│ └── SignalSlot.pro.user
├── EventListener/
│ ├── EventListener.pro
│ ├── EventListener.pro.user
│ ├── event_listener.cpp
│ ├── event_listener.h
│ └── main.cpp
├── GetMetaData/
│ ├── GetMetaData.pro
│ ├── GetMetaData.pro.user
│ └── main.cpp
├── PluginAndService/
│ ├── MultipleInterfaces/
│ │ ├── App/
│ │ │ ├── App.pro
│ │ │ └── main.cpp
│ │ ├── CTK.pri
│ │ ├── MultipleInterfaces.pro
│ │ ├── MultipleInterfaces.pro.user
│ │ └── Plugin/
│ │ ├── MANIFEST.MF
│ │ ├── Plugin.pro
│ │ ├── Resource.qrc
│ │ ├── greet_activator.cpp
│ │ ├── greet_activator.h
│ │ ├── greet_impl.cpp
│ │ ├── greet_impl.h
│ │ └── greet_service.h
│ └── OneInterface/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── OneInterface.pro
│ ├── OneInterface.pro.user
│ ├── Plugins/
│ │ ├── Plugins.pro
│ │ ├── WelcomeCTK/
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── WelcomeCTK.pro
│ │ │ ├── welcome_ctk_activator.cpp
│ │ │ ├── welcome_ctk_activator.h
│ │ │ ├── welcome_ctk_impl.cpp
│ │ │ └── welcome_ctk_impl.h
│ │ └── WelcomeQt/
│ │ ├── MANIFEST.MF
│ │ ├── Resource.qrc
│ │ ├── WelcomeQt.pro
│ │ ├── welcome_qt_activator.cpp
│ │ ├── welcome_qt_activator.h
│ │ ├── welcome_qt_impl.cpp
│ │ └── welcome_qt_impl.h
│ └── Service/
│ └── welcome_service.h
├── README.md
├── RequirePlugin/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── Plugins/
│ │ ├── PluginA/
│ │ │ ├── MANIFEST.MF
│ │ │ ├── PluginA.pro
│ │ │ ├── Resource.qrc
│ │ │ ├── plugin_a_activator.cpp
│ │ │ ├── plugin_a_activator.h
│ │ │ ├── plugin_a_impl.cpp
│ │ │ ├── plugin_a_impl.h
│ │ │ └── plugin_a_service.h
│ │ ├── PluginB/
│ │ │ ├── MANIFEST.MF
│ │ │ ├── PluginB.pro
│ │ │ ├── Resource.qrc
│ │ │ ├── plugin_b_activator.cpp
│ │ │ ├── plugin_b_activator.h
│ │ │ ├── plugin_b_impl.cpp
│ │ │ ├── plugin_b_impl.h
│ │ │ └── plugin_b_service.h
│ │ └── Plugins.pro
│ ├── RequirePlugin.pro
│ └── RequirePlugin.pro.user
├── SampleCTK/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── HelloCTK/
│ │ ├── HelloCTK.pro
│ │ ├── MANIFEST.MF
│ │ ├── Resource.qrc
│ │ ├── hello_activator.cpp
│ │ ├── hello_activator.h
│ │ ├── hello_impl.cpp
│ │ ├── hello_impl.h
│ │ └── hello_service.h
│ ├── SampleCTK.pro
│ └── SampleCTK.pro.user
├── ServiceFactory/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── Plugins/
│ │ ├── Hello/
│ │ │ ├── Hello.pro
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── hello_activator.h
│ │ │ ├── hello_impl.h
│ │ │ ├── hello_service.h
│ │ │ └── service_factory.h
│ │ ├── PluginA/
│ │ │ ├── MANIFEST.MF
│ │ │ ├── PluginA.pro
│ │ │ ├── Resource.qrc
│ │ │ ├── plugin_a_activator.cpp
│ │ │ ├── plugin_a_activator.h
│ │ │ ├── plugin_a_impl.cpp
│ │ │ ├── plugin_a_impl.h
│ │ │ └── plugin_a_service.h
│ │ ├── PluginB/
│ │ │ ├── MANIFEST.MF
│ │ │ ├── PluginB.pro
│ │ │ ├── Resource.qrc
│ │ │ ├── plugin_b_activator.cpp
│ │ │ ├── plugin_b_activator.h
│ │ │ ├── plugin_b_impl.cpp
│ │ │ ├── plugin_b_impl.h
│ │ │ └── plugin_b_service.h
│ │ └── Plugins.pro
│ ├── ServiceFactory.pro
│ └── ServiceFactory.pro.user
├── ServiceTracker/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── Plugins/
│ │ ├── Log/
│ │ │ ├── Log.pro
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── log_activator.cpp
│ │ │ ├── log_activator.h
│ │ │ ├── log_impl.cpp
│ │ │ ├── log_impl.h
│ │ │ └── log_service.h
│ │ ├── Login/
│ │ │ ├── Login.pro
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── login_activator.cpp
│ │ │ ├── login_activator.h
│ │ │ ├── login_impl.cpp
│ │ │ ├── login_impl.h
│ │ │ ├── login_service.h
│ │ │ └── service_tracker.h
│ │ └── Plugins.pro
│ ├── ServiceTracker.pro
│ └── ServiceTracker.pro.user
└── UseCTKWidgets/
├── UseCTKWidgets.pro
├── UseCTKWidgets.pro.user
└── main.cpp
================================================
FILE CONTENTS
================================================
================================================
FILE: EventAdmin/SendEvent/App/App.pro
================================================
QT += core gui widgets
TEMPLATE = app
CONFIG += console
TARGET = App
DESTDIR = $$OUT_PWD/../bin
include($$PWD/../CTK.pri)
SOURCES += \
main.cpp
================================================
FILE: EventAdmin/SendEvent/App/main.cpp
================================================
#include <QCoreApplication>
#include <QtDebug>
#include <ctkPluginFrameworkLauncher.h>
#include <ctkPluginContext.h>
#include <ctkPluginException.h>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
// 获取插件所在位置
// 在插件的搜索路径列表中添加一条路径
ctkPluginFrameworkLauncher::addSearchPath("../../../../CTKInstall/lib/ctk-0.1/plugins");
// 设置并启动 CTK 插件框架
ctkPluginFrameworkLauncher::start("org.commontk.eventadmin");
// 获取插件上下文
ctkPluginContext* context = ctkPluginFrameworkLauncher::getPluginContext();
QString path = QCoreApplication::applicationDirPath() + "/plugins";
// 启动插件 BlogEventHandler
try {
QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(path + "/BlogEventHandler.dll"));
plugin->start();
qDebug() << "BlogEventHandler start ...";
} catch (const ctkPluginException &e) {
qDebug() << "Failed to start BlogEventHandler" << e.what();
}
//启动插件 BlogManager
try {
QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(path + "/BlogManager.dll"));
plugin->start();
qDebug() << "BlogManager start ...";
} catch (const ctkPluginException &e) {
qDebug() << "Failed to start BlogManager" << e.what();
}
// 停止插件
ctkPluginFrameworkLauncher::stop();
return app.exec();
}
================================================
FILE: EventAdmin/SendEvent/CTK.pri
================================================
# CTK 安装路径
CTK_INSTALL_PATH = $$PWD/../../../CTKInstall
# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)
CTK_LIB_PATH = $$CTK_INSTALL_PATH/lib/ctk-0.1
# CTK 插件相关头文件所在路径(例如:ctkPluginFramework.h)
CTK_INCLUDE_PATH = $$CTK_INSTALL_PATH/include/ctk-0.1
# CTK 插件相关头文件所在路径(主要因为用到了 service 相关东西)
CTK_INCLUDE_FRAMEWORK_PATH = $$PWD/../../../CTK-master/Libs/PluginFramework
LIBS += -L$$CTK_LIB_PATH -lCTKCore -lCTKPluginFramework
INCLUDEPATH += $$CTK_INCLUDE_PATH \
$$CTK_INCLUDE_FRAMEWORK_PATH
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogEventHandler/BlogEventHandler.pro
================================================
QT += core
QT -= gui
TEMPLATE = lib
CONFIG += plugin
TARGET = BlogEventHandler
DESTDIR = $$OUT_PWD/../../bin/plugins
include($$PWD/../../CTK.pri)
HEADERS += \
blog_event_handler.h \
blog_event_handler_activator.h
SOURCES += \
blog_event_handler_activator.cpp
RESOURCES += Resource.qrc
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogEventHandler/MANIFEST.MF
================================================
Plugin-SymbolicName: BlogEventHandler
Plugin-ActivationPolicy: eager
Plugin-Category: Demos
Plugin-ContactAddress: https://github.com/myhhub
Plugin-Description: A plugin for handle event
Plugin-Name: BlogEventHandler
Plugin-Vendor: myh
Plugin-Version: 1.0.0
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogEventHandler/Resource.qrc
================================================
<RCC>
<qresource prefix="/BlogEventHandler/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogEventHandler/blog_event_handler.h
================================================
#ifndef BLOG_EVENT_HANDLER_H
#define BLOG_EVENT_HANDLER_H
#include <QObject>
#include <service/event/ctkEventHandler.h>
// 事件处理程序(或订阅者)
class BlogEventHandler : public QObject, public ctkEventHandler
{
Q_OBJECT
Q_INTERFACES(ctkEventHandler)
public:
// 处理事件
void handleEvent(const ctkEvent& event) Q_DECL_OVERRIDE
{
QString title = event.getProperty("title").toString();
QString content = event.getProperty("content").toString();
QString author = event.getProperty("author").toString();
qDebug() << "EventHandler received the message, topic:" << event.getTopic()
<< "properties:" << "title:" << title << "content:" << content << "author:" << author;
}
};
#endif // BLOG_EVENT_HANDLER_H
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogEventHandler/blog_event_handler_activator.cpp
================================================
#include "blog_event_handler.h"
#include "blog_event_handler_activator.h"
#include <service/event/ctkEventConstants.h>
#include <QtDebug>
void BlogEventHandlerActivator::start(ctkPluginContext* context)
{
m_pEventHandler = new BlogEventHandler();
ctkDictionary props;
props[ctkEventConstants::EVENT_TOPIC] = "org/commontk/bloggenerator/published";
props[ctkEventConstants::EVENT_FILTER] = "(author=Waleon)";
context->registerService<ctkEventHandler>(m_pEventHandler, props);
}
void BlogEventHandlerActivator::stop(ctkPluginContext* context)
{
Q_UNUSED(context)
delete m_pEventHandler;
}
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogEventHandler/blog_event_handler_activator.h
================================================
#ifndef BLOG_EVENT_HANDLER_ACTIVATOR_H
#define BLOG_EVENT_HANDLER_ACTIVATOR_H
#include <ctkPluginActivator.h>
class BlogEventHandler;
class BlogEventHandlerActivator : public QObject, public ctkPluginActivator
{
Q_OBJECT
Q_INTERFACES(ctkPluginActivator)
Q_PLUGIN_METADATA(IID "BLOG_EVENT_HANDLER")
public:
void start(ctkPluginContext* context);
void stop(ctkPluginContext* context);
private:
BlogEventHandler *m_pEventHandler;
};
#endif // BLOG_EVENT_HANDLER_ACTIVATOR_H
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogManager/BlogManager.pro
================================================
QT += core
QT -= gui
TEMPLATE = lib
CONFIG += plugin
TARGET = BlogManager
DESTDIR = $$OUT_PWD/../../bin/plugins
include($$PWD/../../CTK.pri)
HEADERS += \
blog_manager.h \
blog_manager_activator.h
SOURCES += \
blog_manager.cpp \
blog_manager_activator.cpp
RESOURCES += Resource.qrc
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogManager/MANIFEST.MF
================================================
Plugin-SymbolicName: BlogManager
Plugin-ActivationPolicy: eager
Plugin-Category: Demos
Plugin-ContactAddress: https://github.com/myhhub
Plugin-Description: A plugin for publish blog
Plugin-Name: BlogManager
Plugin-Vendor: myh
Plugin-Version: 1.0.0
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogManager/Resource.qrc
================================================
<RCC>
<qresource prefix="/BlogManager/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogManager/blog_manager.cpp
================================================
#include "blog_manager.h"
#include <service/event/ctkEventAdmin.h>
#include <QtDebug>
BlogManager::BlogManager(ctkPluginContext* context)
: m_pContext(context)
{
}
// 发布事件
void BlogManager::publishBlog(const Blog& blog)
{
ctkServiceReference ref = m_pContext->getServiceReference<ctkEventAdmin>();
if (ref) {
ctkEventAdmin* eventAdmin = m_pContext->getService<ctkEventAdmin>(ref);
ctkDictionary props;
props["title"] = blog.title;
props["content"] = blog.content;
props["author"] = blog.author;
ctkEvent event("org/commontk/bloggenerator/published", props);
qDebug() << "Publisher sends a message, properties:" << props;
eventAdmin->sendEvent(event);
}
}
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogManager/blog_manager.h
================================================
#ifndef BLOG_MANAGER_H
#define BLOG_MANAGER_H
#include <ctkPluginContext.h>
typedef struct Blog_Info {
QString title;
QString author;
QString content;
} Blog;
// 事件发布者
class BlogManager
{
public:
BlogManager(ctkPluginContext* context);
// 发布事件
void publishBlog(const Blog& blog);
private:
ctkPluginContext* m_pContext;
};
#endif // BLOG_MANAGER_H
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogManager/blog_manager_activator.cpp
================================================
#include "blog_manager.h"
#include "blog_manager_activator.h"
#include <QtDebug>
void BlogManagerActivator::start(ctkPluginContext* context)
{
m_pBlogManager = new BlogManager(context);
Blog blog;
blog.title = "CTK Event Admin";
blog.content = "This is a simple blog";
blog.author = "Waleon";
m_pBlogManager->publishBlog(blog);
}
void BlogManagerActivator::stop(ctkPluginContext* context)
{
Q_UNUSED(context)
delete m_pBlogManager;
}
================================================
FILE: EventAdmin/SendEvent/Plugins/BlogManager/blog_manager_activator.h
================================================
#ifndef BLOG_MANAGER_ACTIVATOR_H
#define BLOG_MANAGER_ACTIVATOR_H
#include <ctkPluginActivator.h>
class BlogManager;
class BlogManagerActivator : public QObject, public ctkPluginActivator
{
Q_OBJECT
Q_INTERFACES(ctkPluginActivator)
Q_PLUGIN_METADATA(IID "BLOG_MANAGER")
public:
void start(ctkPluginContext* context);
void stop(ctkPluginContext* context);
private:
BlogManager *m_pBlogManager;
};
#endif // BLOG_MANAGER_ACTIVATOR_H
================================================
FILE: EventAdmin/SendEvent/Plugins/Plugins.pro
================================================
TEMPLATE = subdirs
SUBDIRS += \
BlogManager \
BlogEventHandler
CONFIG += ordered
================================================
FILE: EventAdmin/SendEvent/SendEvent.pro
================================================
TEMPLATE = subdirs
SUBDIRS += \
App \
Plugins
CONFIG += ordered
================================================
FILE: EventAdmin/SendEvent/SendEvent.pro.user
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.13.0, 2021-03-10T11:44:54. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{c4da1889-17ad-47a8-bddc-cd90da2180db}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.2">
<value type="QString" key="language">Nim</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">NimGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">3</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">2</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5151.win64_msvc2019_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\EventAdmin\build-SendEvent-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/build-SendEvent-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="int" key="QtQuickCompiler">2</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">2</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\EventAdmin\build-SendEvent-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/build-SendEvent-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\EventAdmin\build-SendEvent-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/build-SendEvent-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/SendEvent/App/App.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/SendEvent/App/App.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/build-SendEvent-Desktop_Qt_5_15_1_MSVC2019_64bit-Release/App/../bin</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>
================================================
FILE: EventAdmin/SignalSlot/App/App.pro
================================================
QT += core gui widgets
TEMPLATE = app
CONFIG += console
TARGET = App
DESTDIR = $$OUT_PWD/../bin
include($$PWD/../CTK.pri)
SOURCES += \
main.cpp
================================================
FILE: EventAdmin/SignalSlot/App/main.cpp
================================================
#include <QCoreApplication>
#include <QtDebug>
#include <ctkPluginFrameworkLauncher.h>
#include <ctkPluginContext.h>
#include <ctkPluginException.h>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
// 获取插件所在位置
// 在插件的搜索路径列表中添加一条路径
ctkPluginFrameworkLauncher::addSearchPath("../../../../CTKInstall/lib/ctk-0.1/plugins");
// 设置并启动 CTK 插件框架
ctkPluginFrameworkLauncher::start("org.commontk.eventadmin");
// 获取插件上下文
ctkPluginContext* context = ctkPluginFrameworkLauncher::getPluginContext();
QString path = QCoreApplication::applicationDirPath() + "/plugins";
// 启动插件 BlogEventHandlerUsingSlots
try {
QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(path + "/BlogEventHandlerUsingSlots.dll"));
plugin->start();
qDebug() << "BlogEventHandlerUsingSlots start ...";
} catch (const ctkPluginException &e) {
qDebug() << "Failed to start BlogEventHandlerUsingSlots" << e.what();
}
// 启动插件 BlogManagerUsingSignals
try {
QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(path + "/BlogManagerUsingSignals.dll"));
plugin->start();
qDebug() << "BlogManagerUsingSignals start ...";
} catch (const ctkPluginException &e) {
qDebug() << "Failed to start BlogManagerUsingSignals" << e.what();
}
// 停止插件
ctkPluginFrameworkLauncher::stop();
return app.exec();
}
================================================
FILE: EventAdmin/SignalSlot/CTK.pri
================================================
# CTK 安装路径
CTK_INSTALL_PATH = $$PWD/../../../CTKInstall
# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)
CTK_LIB_PATH = $$CTK_INSTALL_PATH/lib/ctk-0.1
# CTK 插件相关头文件所在路径(例如:ctkPluginFramework.h)
CTK_INCLUDE_PATH = $$CTK_INSTALL_PATH/include/ctk-0.1
# CTK 插件相关头文件所在路径(主要因为用到了 service 相关东西)
CTK_INCLUDE_FRAMEWORK_PATH = $$PWD/../../../CTK-master/Libs/PluginFramework
LIBS += -L$$CTK_LIB_PATH -lCTKCore -lCTKPluginFramework
INCLUDEPATH += $$CTK_INCLUDE_PATH \
$$CTK_INCLUDE_FRAMEWORK_PATH
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/BlogEventHandlerUsingSlots.pro
================================================
QT += core
QT -= gui
TEMPLATE = lib
CONFIG += plugin
TARGET = BlogEventHandlerUsingSlots
DESTDIR = $$OUT_PWD/../../bin/plugins
include($$PWD/../../CTK.pri)
HEADERS += \
blog_event_handler_using_slots.h \
blog_event_handler_using_slots_activator.h
SOURCES += \
blog_event_handler_using_slots_activator.cpp
RESOURCES += Resource.qrc
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/MANIFEST.MF
================================================
Plugin-SymbolicName: com.Waleon.BlogEventHandlerUsingSlots
Plugin-ActivationPolicy: eager
Plugin-Category: Demos
Plugin-ContactAddress: https://github.com/Waleon
Plugin-Description: A plugin for handle event
Plugin-Name: BlogEventHandlerUsingSlots
Plugin-Vendor: Waleon
Plugin-Version: 1.0.0
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/Resource.qrc
================================================
<RCC>
<qresource prefix="/BlogEventHandlerUsingSlots/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/blog_event_handler_using_slots.h
================================================
#ifndef BLOG_EVENT_HANDLER_USING_SLOTS_H
#define BLOG_EVENT_HANDLER_USING_SLOTS_H
#include <QObject>
#include <QDebug>
#include <service/event/ctkEvent.h>
// 事件处理程序(订阅者)
class BlogEventHandlerUsingSlots : public QObject
{
Q_OBJECT
public slots:
void onBlogPublished(const ctkEvent& event)
{
QString title = event.getProperty("title").toString();
QString content = event.getProperty("content").toString();
QString author = event.getProperty("author").toString();
qDebug() << "EventHandler received the message, topic:" << event.getTopic()
<< "properties:" << "title:" << title << "content:" << content << "author:" << author;
}
};
#endif // BLOG_EVENT_HANDLER_USING_SLOTS_H
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/blog_event_handler_using_slots_activator.cpp
================================================
#include "blog_event_handler_using_slots.h"
#include "blog_event_handler_using_slots_activator.h"
#include <service/event/ctkEventConstants.h>
#include <service/event/ctkEventAdmin.h>
void BlogEventHandlerUsingSlotsActivator::start(ctkPluginContext* context)
{
m_pEventHandler = new BlogEventHandlerUsingSlots();
ctkDictionary props;
props[ctkEventConstants::EVENT_TOPIC] = "org/commontk/bloggenerator/published";
ctkServiceReference ref = context->getServiceReference<ctkEventAdmin>();
if (ref) {
ctkEventAdmin* eventAdmin = context->getService<ctkEventAdmin>(ref);
eventAdmin->subscribeSlot(m_pEventHandler, SLOT(onBlogPublished(ctkEvent)), props, Qt::DirectConnection);
}
}
void BlogEventHandlerUsingSlotsActivator::stop(ctkPluginContext* context)
{
Q_UNUSED(context)
delete m_pEventHandler;
}
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/blog_event_handler_using_slots_activator.h
================================================
#ifndef BLOG_EVENT_HANDLER_USING_SLOTS_ACTIVATOR_H
#define BLOG_EVENT_HANDLER_USING_SLOTS_ACTIVATOR_H
#include <ctkPluginActivator.h>
class BlogEventHandlerUsingSlots;
class BlogEventHandlerUsingSlotsActivator : public QObject, public ctkPluginActivator
{
Q_OBJECT
Q_INTERFACES(ctkPluginActivator)
Q_PLUGIN_METADATA(IID "BLOG_EVENT_HANDLER_USING_SLOTS")
public:
void start(ctkPluginContext* context);
void stop(ctkPluginContext* context);
private:
BlogEventHandlerUsingSlots *m_pEventHandler;
};
#endif // BLOG_EVENT_HANDLER_USING_SLOTS_ACTIVATOR_H
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/BlogManagerUsingSignals.pro
================================================
QT += core
QT -= gui
TEMPLATE = lib
CONFIG += plugin
TARGET = BlogManagerUsingSignals
DESTDIR = $$OUT_PWD/../../bin/plugins
include($$PWD/../../CTK.pri)
HEADERS += \
blog_manager_using_signals.h \
blog_manager_using_signals_activator.h
SOURCES += \
blog_manager_using_signals.cpp \
blog_manager_using_signals_activator.cpp
RESOURCES += Resource.qrc
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/MANIFEST.MF
================================================
Plugin-SymbolicName: com.Waleon.BlogManagerUsingSignals
Plugin-ActivationPolicy: eager
Plugin-Category: Demos
Plugin-ContactAddress: https://github.com/Waleon
Plugin-Description: A plugin for publish blog
Plugin-Name: BlogManagerUsingSignals
Plugin-Vendor: Waleon
Plugin-Version: 1.0.0
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/Resource.qrc
================================================
<RCC>
<qresource prefix="/BlogManagerUsingSignals/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/blog_manager_using_signals.cpp
================================================
#include "blog_manager_using_signals.h"
BlogManagerUsingSignals::BlogManagerUsingSignals(ctkPluginContext *context)
{
ctkServiceReference ref = context->getServiceReference<ctkEventAdmin>();
if (ref) {
ctkEventAdmin* eventAdmin = context->getService<ctkEventAdmin>(ref);
// 使用 Qt::DirectConnection 等同于 ctkEventAdmin::sendEvent()
eventAdmin->publishSignal(this, SIGNAL(blogPublished(ctkDictionary)), "org/commontk/bloggenerator/published", Qt::DirectConnection);
}
}
// 发布事件
void BlogManagerUsingSignals::publishBlog(const Blog& blog)
{
ctkDictionary props;
props["title"] = blog.title;
props["content"] = blog.content;
props["author"] = blog.author;
qDebug() << "Publisher sends a message, properties:" << props;
emit blogPublished(props);
}
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/blog_manager_using_signals.h
================================================
#ifndef BLOG_MANAGER_USING_SIGNALS_SIGNALS_H
#define BLOG_MANAGER_USING_SIGNALS_SIGNALS_H
#include <QObject>
#include <ctkPluginContext.h>
#include <service/event/ctkEventAdmin.h>
typedef struct Blog_Info {
QString title;
QString author;
QString content;
} Blog;
// 事件发布者
class BlogManagerUsingSignals : public QObject
{
Q_OBJECT
public:
BlogManagerUsingSignals(ctkPluginContext* context);
// 发布事件
void publishBlog(const Blog& blog);
signals:
void blogPublished(const ctkDictionary&);
};
#endif // BLOG_MANAGER_USING_SIGNALS_SIGNALS_H
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/blog_manager_using_signals_activator.cpp
================================================
#include "blog_manager_using_signals.h"
#include "blog_manager_using_signals_activator.h"
void BlogManagerUsingSignalsActivator::start(ctkPluginContext* context)
{
m_pBlogManager = new BlogManagerUsingSignals(context);
Blog blog;
blog.title = "CTK Event Admin";
blog.content = "This is a simple blog";
blog.author = "Waleon";
m_pBlogManager->publishBlog(blog);
}
void BlogManagerUsingSignalsActivator::stop(ctkPluginContext* context)
{
Q_UNUSED(context)
delete m_pBlogManager;
}
================================================
FILE: EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/blog_manager_using_signals_activator.h
================================================
#ifndef BLOG_MANAGER_USING_SIGNALS_ACTIVATOR_H
#define BLOG_MANAGER_USING_SIGNALS_ACTIVATOR_H
#include <ctkPluginActivator.h>
class BlogManagerUsingSignals;
class BlogManagerUsingSignalsActivator : public QObject, public ctkPluginActivator
{
Q_OBJECT
Q_INTERFACES(ctkPluginActivator)
Q_PLUGIN_METADATA(IID "BLOG_MANAGER_USING_SINGALS")
public:
void start(ctkPluginContext* context);
void stop(ctkPluginContext* context);
private:
BlogManagerUsingSignals *m_pBlogManager;
};
#endif // BLOG_MANAGER_USING_SIGNALS_ACTIVATOR_H
================================================
FILE: EventAdmin/SignalSlot/Plugins/Plugins.pro
================================================
TEMPLATE = subdirs
SUBDIRS += \
BlogManagerUsingSignals \
BlogEventHandlerUsingSlots
CONFIG += ordered
================================================
FILE: EventAdmin/SignalSlot/SignalSlot.pro
================================================
TEMPLATE = subdirs
SUBDIRS += \
App \
Plugins
CONFIG += ordered
================================================
FILE: EventAdmin/SignalSlot/SignalSlot.pro.user
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.13.0, 2021-03-10T11:54:18. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{c4da1889-17ad-47a8-bddc-cd90da2180db}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.2">
<value type="QString" key="language">Nim</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">NimGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">3</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">2</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5151.win64_msvc2019_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\EventAdmin\build-SignalSlot-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/build-SignalSlot-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="int" key="QtQuickCompiler">2</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">2</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\EventAdmin\build-SignalSlot-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/build-SignalSlot-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\EventAdmin\build-SignalSlot-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/build-SignalSlot-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/SignalSlot/App/App.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/SignalSlot/App/App.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/d/mmm/qt/ctk/CTK-examples/EventAdmin/build-SignalSlot-Desktop_Qt_5_15_1_MSVC2019_64bit-Release/App/../bin</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>
================================================
FILE: EventListener/EventListener.pro
================================================
QT += core
QT -= gui
TARGET = EventListener
CONFIG += console
TEMPLATE = app
# CTK 安装路径
CTK_INSTALL_PATH = $$PWD/../../CTKInstall
# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)
CTK_LIB_PATH = $$CTK_INSTALL_PATH/lib/ctk-0.1
# CTK 插件相关头文件所在路径(例如:ctkPluginFramework.h)
CTK_INCLUDE_PATH = $$CTK_INSTALL_PATH/include/ctk-0.1
# CTK 插件相关头文件所在路径(主要因为用到了 service 相关东西)
CTK_INCLUDE_FRAMEWORK_PATH = $$PWD/../../CTK-master/Libs/PluginFramework
LIBS += -L$$CTK_LIB_PATH -lCTKCore -lCTKPluginFramework
INCLUDEPATH += $$CTK_INCLUDE_PATH \
$$CTK_INCLUDE_FRAMEWORK_PATH
SOURCES += main.cpp \
event_listener.cpp
HEADERS += \
event_listener.h
================================================
FILE: EventListener/EventListener.pro.user
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.13.0, 2021-03-10T12:58:33. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{c4da1889-17ad-47a8-bddc-cd90da2180db}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.2">
<value type="QString" key="language">Nim</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">NimGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">3</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">2</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5151.win64_msvc2019_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\build-EventListener-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/build-EventListener-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="int" key="QtQuickCompiler">2</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">2</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\build-EventListener-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/build-EventListener-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\build-EventListener-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/build-EventListener-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/d/mmm/qt/ctk/CTK-examples/EventListener/EventListener.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/d/mmm/qt/ctk/CTK-examples/EventListener/EventListener.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/d/mmm/qt/ctk/CTK-examples/build-EventListener-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>
================================================
FILE: EventListener/event_listener.cpp
================================================
#include "event_listener.h"
EventListener::EventListener(QObject *parent)
: QObject(parent)
{
}
EventListener::~EventListener()
{
}
// 监听框架事件
void EventListener::onFrameworkEvent(const ctkPluginFrameworkEvent& event)
{
if (!event.isNull()) {
QSharedPointer<ctkPlugin> plugin = event.getPlugin();
qDebug() << "FrameworkEvent: [" << plugin->getSymbolicName() << "]" << event.getType() << event.getErrorString();
} else {
qDebug() << "The framework event is null";
}
}
// 监听插件事件
void EventListener::onPluginEvent(const ctkPluginEvent& event)
{
if (!event.isNull()) {
QSharedPointer<ctkPlugin> plugin = event.getPlugin();
qDebug() << "PluginEvent: [" << plugin->getSymbolicName() << "]" << event.getType();
} else {
qDebug() << "The plugin event is null";
}
}
// 监听服务事件
void EventListener::onServiceEvent(const ctkServiceEvent &event)
{
if (!event.isNull()) {
ctkServiceReference ref = event.getServiceReference();
QSharedPointer<ctkPlugin> plugin = ref.getPlugin();
qDebug() << "ServiceEvent: [" << event.getType() << "]" << plugin->getSymbolicName() << ref.getUsingPlugins();
} else {
qDebug() << "The service event is null";
}
}
================================================
FILE: EventListener/event_listener.h
================================================
#ifndef EVENT_LISTENER_H
#define EVENT_LISTENER_H
#include <QObject>
#include <ctkPluginFrameworkEvent.h>
#include <ctkPluginEvent.h>
#include <ctkServiceEvent.h>
class EventListener : public QObject
{
Q_OBJECT
public:
explicit EventListener(QObject *parent = Q_NULLPTR);
~EventListener();
public slots:
// 监听框架事件
void onFrameworkEvent(const ctkPluginFrameworkEvent& event);
// 监听插件事件
void onPluginEvent(const ctkPluginEvent& event);
// 监听服务事件
void onServiceEvent(const ctkServiceEvent& event);
};
#endif // EVENT_LISTENER_H
================================================
FILE: EventListener/main.cpp
================================================
#include <QCoreApplication>
#include <QDirIterator>
#include <QtDebug>
#include <ctkPluginFrameworkFactory.h>
#include <ctkPluginFramework.h>
#include <ctkPluginException.h>
#include <ctkPluginContext.h>
#include "event_listener.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
ctkPluginFrameworkFactory frameWorkFactory;
QSharedPointer<ctkPluginFramework> framework = frameWorkFactory.getFramework();
try {
// 初始化并启动插件框架
framework->init();
framework->start();
qDebug() << "CTK Plugin Framework start ...";
} catch (const ctkPluginException &e) {
qDebug() << "Failed to initialize the plugin framework: " << e.what();
return -1;
}
// 获取插件上下文
ctkPluginContext* context = framework->getPluginContext();
// 事件监听
EventListener listener;
context->connectFrameworkListener(&listener, SLOT(onFrameworkEvent(ctkPluginFrameworkEvent)));
context->connectPluginListener(&listener, SLOT(onPluginEvent(ctkPluginEvent)));
// 过滤 ctkEventAdmin 服务
// QString filter = QString("(%1=%2)").arg(ctkPluginConstants::OBJECTCLASS).arg("org.commontk.eventadmin");
context->connectServiceListener(&listener, "onServiceEvent"); //, filter);
// 获取插件所在位置
QString path = QCoreApplication::applicationDirPath() + "/plugins";
// 遍历路径下的所有插件
QDirIterator itPlugin(path, QStringList() << "*.dll" << "*.so", QDir::Files);
while (itPlugin.hasNext()) {
QString strPlugin = itPlugin.next();
try {
// 安装插件
QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(strPlugin));
// 启动插件
plugin->start(ctkPlugin::START_TRANSIENT);
} catch (const ctkPluginException &e) {
return -1;
}
}
framework->stop();
return app.exec();
}
================================================
FILE: GetMetaData/GetMetaData.pro
================================================
QT += core
QT -= gui
DESTDIR = $$PWD/bin
TARGET = GetMetaData
CONFIG += c++11 console
CONFIG -= app_bundle
TEMPLATE = app
# CTK 安装路径
CTK_INSTALL_PATH = $$PWD/../../CTKInstall
# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)
CTK_LIB_PATH = $$CTK_INSTALL_PATH/lib/ctk-0.1
# CTK 插件相关头文件所在路径(例如:ctkPluginFramework.h)
CTK_INCLUDE_PATH = $$CTK_INSTALL_PATH/include/ctk-0.1
# CTK 插件相关头文件所在路径(主要因为用到了 service 相关东西)
CTK_INCLUDE_FRAMEWORK_PATH = $$PWD/../../CTK-master/Libs/PluginFramework
LIBS += -L$$CTK_LIB_PATH -lCTKCore -lCTKPluginFramework
INCLUDEPATH += $$CTK_INCLUDE_PATH \
$$CTK_INCLUDE_FRAMEWORK_PATH
SOURCES += main.cpp
================================================
FILE: GetMetaData/GetMetaData.pro.user
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.13.0, 2021-03-08T16:36:38. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{c4da1889-17ad-47a8-bddc-cd90da2180db}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.2">
<value type="QString" key="language">Nim</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">NimGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">3</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">2</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5151.win64_msvc2019_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\build-GetMetaData-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/build-GetMetaData-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="int" key="QtQuickCompiler">2</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">2</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\build-GetMetaData-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/build-GetMetaData-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\build-GetMetaData-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/build-GetMetaData-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/d/mmm/qt/ctk/CTK-examples/GetMetaData/GetMetaData.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/d/mmm/qt/ctk/CTK-examples/GetMetaData/GetMetaData.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/d/mmm/qt/ctk/CTK-examples/GetMetaData/bin</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>
================================================
FILE: GetMetaData/main.cpp
================================================
#include <QCoreApplication>
#include <QDirIterator>
#include <QtDebug>
#include <ctkPluginFrameworkFactory.h>
#include <ctkPluginFramework.h>
#include <ctkPluginException.h>
#include <ctkPluginContext.h>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
ctkPluginFrameworkFactory frameWorkFactory;
QSharedPointer<ctkPluginFramework> framework = frameWorkFactory.getFramework();
try {
// 初始化并启动插件框架
framework->init();
framework->start();
qDebug() << "CTK Plugin Framework start ...";
} catch (const ctkPluginException &e) {
qDebug() << "Failed to initialize the plugin framework: " << e.what();
return -1;
}
// 获取插件上下文
ctkPluginContext* context = framework->getPluginContext();
// 获取插件所在位置
QString path = QCoreApplication::applicationDirPath() + "/plugins";
// 遍历路径下的所有插件
QDirIterator itPlugin(path, QStringList() << "*.dll" << "*.so", QDir::Files);
while (itPlugin.hasNext()) {
QString strPlugin = itPlugin.next();
try {
// 安装插件
QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(strPlugin));
qDebug() << "Plugin install ...";
// 获取清单头和值
QHash<QString, QString> headers = plugin->getHeaders();
qDebug() << "Headers:" << headers << "\r\n";
// 获取符号名
QString symb = plugin->getSymbolicName();
qDebug() << "Symbolic Name:" << symb << "\r\n";
// 获取版本号
ctkVersion version = plugin->getVersion();
qDebug() << "Version:" << version.toString()
<< "Major:" << version.getMajor()
<< "Minor:" << version.getMinor()
<< "Micro:" << version.getMicro()
<< "Qualifier:" << version.getQualifier();
// 启动插件
//plugin->start(ctkPlugin::START_TRANSIENT);
} catch (const ctkPluginException &e) {
qDebug() << "Failed to install plugin" << e.what();
return -1;
}
}
return app.exec();
}
================================================
FILE: PluginAndService/MultipleInterfaces/App/App.pro
================================================
QT += core gui widgets
TEMPLATE = app
CONFIG += console
TARGET = App
DESTDIR = $$OUT_PWD/../bin
include($$PWD/../CTK.pri)
SOURCES += \
main.cpp
================================================
FILE: PluginAndService/MultipleInterfaces/App/main.cpp
================================================
#include <QCoreApplication>
#include <QDirIterator>
#include <QtDebug>
#include <ctkPluginFrameworkFactory.h>
#include <ctkPluginFramework.h>
#include <ctkPluginException.h>
#include <ctkPluginContext.h>
#include "../Plugin/greet_service.h""
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
ctkPluginFrameworkFactory frameWorkFactory;
QSharedPointer<ctkPluginFramework> framework = frameWorkFactory.getFramework();
try {
// 初始化并启动插件框架
framework->init();
framework->start();
qDebug() << "CTK Plugin Framework start ...";
} catch (const ctkPluginException &e) {
qDebug() << "Failed to initialize the plugin framework: " << e.what();
return -1;
}
// 获取插件上下文
ctkPluginContext* context = framework->getPluginContext();
// 获取插件所在位置
QString path = QCoreApplication::applicationDirPath() + "/plugins";
// 遍历路径下的所有插件
QDirIterator itPlugin(path, QStringList() << "*.dll" << "*.so", QDir::Files);
while (itPlugin.hasNext()) {
QString strPlugin = itPlugin.next();
try {
// 安装插件
QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(strPlugin));
// 启动插件
plugin->start(ctkPlugin::START_TRANSIENT);
qDebug() << "Plugin start ...";
} catch (const ctkPluginException &e) {
qDebug() << "Failed to install plugin" << e.what();
return -1;
}
}
// 获取服务引用
ctkServiceReference ref = context->getServiceReference<HelloService>();
if (ref) {
HelloService* service = qobject_cast<HelloService *>(context->getService(ref));
if (service != Q_NULLPTR)
service->sayHello();
}
ref = context->getServiceReference<ByeService>();
if (ref) {
ByeService* service = qobject_cast<ByeService *>(context->getService(ref));
if (service != Q_NULLPTR)
service->sayBye();
}
return app.exec();
}
================================================
FILE: PluginAndService/MultipleInterfaces/CTK.pri
================================================
# CTK 安装路径
CTK_INSTALL_PATH = $$PWD/../../../CTKInstall
# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)
CTK_LIB_PATH = $$CTK_INSTALL_PATH/lib/ctk-0.1
# CTK 插件相关头文件所在路径(例如:ctkPluginFramework.h)
CTK_INCLUDE_PATH = $$CTK_INSTALL_PATH/include/ctk-0.1
# CTK 插件相关头文件所在路径(主要因为用到了 service 相关东西)
CTK_INCLUDE_FRAMEWORK_PATH = $$PWD/../../../CTK-master/Libs/PluginFramework
LIBS += -L$$CTK_LIB_PATH -lCTKCore -lCTKPluginFramework
INCLUDEPATH += $$CTK_INCLUDE_PATH \
$$CTK_INCLUDE_FRAMEWORK_PATH
================================================
FILE: PluginAndService/MultipleInterfaces/MultipleInterfaces.pro
================================================
TEMPLATE = subdirs
SUBDIRS += \
App \
Plugin
CONFIG += ordered
================================================
FILE: PluginAndService/MultipleInterfaces/MultipleInterfaces.pro.user
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.13.0, 2021-03-10T10:53:25. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{c4da1889-17ad-47a8-bddc-cd90da2180db}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.2">
<value type="QString" key="language">Nim</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">NimGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">3</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">2</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5151.win64_msvc2019_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\PluginAndService\build-MultipleInterfaces-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/build-MultipleInterfaces-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="int" key="QtQuickCompiler">2</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">2</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\PluginAndService\build-MultipleInterfaces-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/build-MultipleInterfaces-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\PluginAndService\build-MultipleInterfaces-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/build-MultipleInterfaces-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/MultipleInterfaces/App/App.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/MultipleInterfaces/App/App.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/build-MultipleInterfaces-Desktop_Qt_5_15_1_MSVC2019_64bit-Release/App/../bin</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>
================================================
FILE: PluginAndService/MultipleInterfaces/Plugin/MANIFEST.MF
================================================
Plugin-SymbolicName: Greet
Plugin-ActivationPolicy: eager
Plugin-Category: Demos
Plugin-ContactAddress: https://github.com/myhhub
Plugin-Description: A plugin for greet
Plugin-Name: Greet
Plugin-Vendor: myh
Plugin-Version: 1.0.0
================================================
FILE: PluginAndService/MultipleInterfaces/Plugin/Plugin.pro
================================================
QT += core
QT -= gui
TEMPLATE = lib
CONFIG += plugin
TARGET = Greet
DESTDIR = $$OUT_PWD/../bin/plugins
include($$PWD/../CTK.pri)
HEADERS += \
greet_service.h \
greet_impl.h \
greet_activator.h
SOURCES += \
greet_impl.cpp \
greet_activator.cpp
RESOURCES += Resource.qrc
================================================
FILE: PluginAndService/MultipleInterfaces/Plugin/Resource.qrc
================================================
<RCC>
<qresource prefix="/Greet/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
================================================
FILE: PluginAndService/MultipleInterfaces/Plugin/greet_activator.cpp
================================================
#include "greet_impl.h"
#include "greet_activator.h"
void GreetActivator::start(ctkPluginContext* context)
{
m_pImpl = new GreetImpl();
// 注册服务
context->registerService<HelloService>(m_pImpl);
context->registerService<ByeService>(m_pImpl);
}
void GreetActivator::stop(ctkPluginContext* context)
{
Q_UNUSED(context)
delete m_pImpl;
}
================================================
FILE: PluginAndService/MultipleInterfaces/Plugin/greet_activator.h
================================================
#ifndef GREET_ACTIVATOR_H
#define GREET_ACTIVATOR_H
#include <ctkPluginActivator.h>
class GreetImpl;
class GreetActivator : public QObject, public ctkPluginActivator
{
Q_OBJECT
Q_INTERFACES(ctkPluginActivator)
Q_PLUGIN_METADATA(IID "GREET")
public:
void start(ctkPluginContext* context);
void stop(ctkPluginContext* context);
private:
GreetImpl *m_pImpl;
};
#endif // GREET_ACTIVATOR_H
================================================
FILE: PluginAndService/MultipleInterfaces/Plugin/greet_impl.cpp
================================================
#include "greet_impl.h"
#include <QtDebug>
GreetImpl::GreetImpl()
{
}
void GreetImpl::sayHello()
{
qDebug() << "Hello,CTK!";
}
void GreetImpl::sayBye()
{
qDebug() << "Bye,CTK!";
}
================================================
FILE: PluginAndService/MultipleInterfaces/Plugin/greet_impl.h
================================================
#ifndef GREET_IMPL_H
#define GREET_IMPL_H
#include "greet_service.h"
#include <QObject>
class GreetImpl : public QObject, public HelloService, public ByeService
{
Q_OBJECT
Q_INTERFACES(HelloService)
Q_INTERFACES(ByeService)
public:
GreetImpl();
void sayHello() Q_DECL_OVERRIDE;
void sayBye() Q_DECL_OVERRIDE;
};
#endif // GREET_IMPL_H
================================================
FILE: PluginAndService/MultipleInterfaces/Plugin/greet_service.h
================================================
#ifndef GREET_SERVICE_H
#define GREET_SERVICE_H
#include <QtPlugin>
class HelloService
{
public:
virtual ~HelloService() {}
virtual void sayHello() = 0;
};
#define HelloService_iid "org.commontk.service.demos.HelloService"
Q_DECLARE_INTERFACE(HelloService, HelloService_iid)
class ByeService
{
public:
virtual ~ByeService() {}
virtual void sayBye() = 0;
};
#define ByeService_iid "org.commontk.service.demos.ByeService"
Q_DECLARE_INTERFACE(ByeService, ByeService_iid)
#endif // GREET_SERVICE_H
================================================
FILE: PluginAndService/OneInterface/App/App.pro
================================================
QT += core gui widgets
TEMPLATE = app
CONFIG += console
TARGET = App
DESTDIR = $$OUT_PWD/../bin
include($$PWD/../CTK.pri)
SOURCES += \
main.cpp
================================================
FILE: PluginAndService/OneInterface/App/main.cpp
================================================
#include <QCoreApplication>
#include <QDirIterator>
#include <QtDebug>
#include <ctkPluginFrameworkFactory.h>
#include <ctkPluginFramework.h>
#include <ctkPluginException.h>
#include <ctkPluginContext.h>
#include "../Service/welcome_service.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
ctkPluginFrameworkFactory frameWorkFactory;
QSharedPointer<ctkPluginFramework> framework = frameWorkFactory.getFramework();
try {
// 初始化并启动插件框架
framework->init();
framework->start();
qDebug() << "CTK Plugin Framework start ...";
} catch (const ctkPluginException &e) {
qDebug() << "Failed to initialize the plugin framework: " << e.what();
return -1;
}
qDebug() << "********************";
// 获取插件上下文
ctkPluginContext* context = framework->getPluginContext();
// 获取插件所在位置
QString path = QCoreApplication::applicationDirPath() + "/plugins";
// 遍历路径下的所有插件
QDirIterator itPlugin(path, QStringList() << "*.dll" << "*.so", QDir::Files);
while (itPlugin.hasNext()) {
QString strPlugin = itPlugin.next();
try {
// 安装插件
QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(strPlugin));
// 启动插件
plugin->start(ctkPlugin::START_TRANSIENT);
qDebug() << "Plugin start:" << QFileInfo(strPlugin).fileName();
} catch (const ctkPluginException &e) {
qDebug() << "Failed to start plugin" << e.what();
return -1;
}
}
qDebug() << "********************";
// 1. 获取所有服务
QList<ctkServiceReference> refs = context->getServiceReferences<WelcomeService>();
foreach (ctkServiceReference ref, refs) {
if (ref) {
qDebug() << "Name:" << ref.getProperty("name").toString()
<< "Service ranking:" << ref.getProperty(ctkPluginConstants::SERVICE_RANKING).toLongLong()
<< "Service id:" << ref.getProperty(ctkPluginConstants::SERVICE_ID).toLongLong();
WelcomeService* service = qobject_cast<WelcomeService *>(context->getService(ref));
if (service != Q_NULLPTR)
service->welcome();
}
}
qDebug() << "********************";
// 2. 使用过滤表达式,获取感兴趣的服务
refs = context->getServiceReferences<WelcomeService>("(&(name=CTK))");
foreach (ctkServiceReference ref, refs) {
if (ref) {
WelcomeService* service = qobject_cast<WelcomeService *>(context->getService(ref));
if (service != Q_NULLPTR)
service->welcome();
}
}
qDebug() << "********************";
// 3. 获取某一个服务(由 Service Ranking 和 Service ID 决定)
ctkServiceReference ref = context->getServiceReference<WelcomeService>();
if (ref) {
WelcomeService* service = qobject_cast<WelcomeService *>(context->getService(ref));
if (service != Q_NULLPTR)
service->welcome();
}
return app.exec();
}
================================================
FILE: PluginAndService/OneInterface/CTK.pri
================================================
# CTK 安装路径
CTK_INSTALL_PATH = $$PWD/../../../CTKInstall
# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)
CTK_LIB_PATH = $$CTK_INSTALL_PATH/lib/ctk-0.1
# CTK 插件相关头文件所在路径(例如:ctkPluginFramework.h)
CTK_INCLUDE_PATH = $$CTK_INSTALL_PATH/include/ctk-0.1
# CTK 插件相关头文件所在路径(主要因为用到了 service 相关东西)
CTK_INCLUDE_FRAMEWORK_PATH = $$PWD/../../../CTK-master/Libs/PluginFramework
LIBS += -L$$CTK_LIB_PATH -lCTKCore -lCTKPluginFramework
INCLUDEPATH += $$CTK_INCLUDE_PATH \
$$CTK_INCLUDE_FRAMEWORK_PATH
================================================
FILE: PluginAndService/OneInterface/OneInterface.pro
================================================
TEMPLATE = subdirs
SUBDIRS += \
App \
Plugins
CONFIG += ordered
================================================
FILE: PluginAndService/OneInterface/OneInterface.pro.user
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.13.0, 2021-03-10T10:44:37. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{c4da1889-17ad-47a8-bddc-cd90da2180db}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.2">
<value type="QString" key="language">Nim</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">NimGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">3</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">2</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">4</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.15.1 MSVC2019 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5151.win64_msvc2019_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\PluginAndService\build-OneInterface-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/build-OneInterface-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="int" key="QtQuickCompiler">2</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">2</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\PluginAndService\build-OneInterface-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/build-OneInterface-Desktop_Qt_5_15_1_MSVC2019_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="bool">true</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\d\mmm\qt\ctk\CTK-examples\PluginAndService\build-OneInterface-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/build-OneInterface-Desktop_Qt_5_15_1_MSVC2019_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/OneInterface/App/App.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/OneInterface/App/App.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/d/mmm/qt/ctk/CTK-examples/PluginAndService/build-OneInterface-Desktop_Qt_5_15_1_MSVC2019_64bit-Release/App/../bin</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>
================================================
FILE: PluginAndService/OneInterface/Plugins/Plugins.pro
================================================
TEMPLATE = subdirs
SUBDIRS += \
WelcomeCTK \
WelcomeQt
CONFIG += ordered
================================================
FILE: PluginAndService/OneInterface/Plugins/WelcomeCTK/MANIFEST.MF
================================================
Plugin-SymbolicName: Welcome.CTK
Plugin-ActivationPolicy: eager
Plugin-Category: Demos
Plugin-ContactAddress: https://github.com/myhhub
Plugin-Description: A plugin for welcome CTK
Plugin-Name: WelcomeCTK
Plugin-Vendor: myh
Plugin-Version: 1.0.0
================================================
FILE: PluginAndService/OneInterface/Plugins/WelcomeCTK/Resource.qrc
================================================
<RCC>
<qresource prefix="/WelcomeCTK/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
================================================
FILE: PluginAndService/OneInterface/Plugins/WelcomeCTK/WelcomeCTK.pro
================================================
QT += core
QT -= gui
TEMPLATE = lib
CONFIG += plugin
TARGET = WelcomeCTK
DESTDIR = $$OUT_PWD/../../bin/plugins
include($$PWD/../../CTK.pri)
HEADERS += \
welcome_ctk_impl.h \
welcome_ctk_activator.h
SOURCES += \
welcome_ctk_impl.cpp \
welcome_ctk_activator.cpp
RESOURCES += Resource.qrc
================================================
FILE: PluginAndService/OneInterface/Plugins/WelcomeCTK/welcome_ctk_activator.cpp
================================================
#include "welcome_ctk_impl.h"
#include "welcome_ctk_activator.h"
#include <QtDebug>
void WelcomeCTKActivator::start(ctkPluginContext* context)
{
ctkDictionary properties;
properties.insert(ctkPluginConstants::SERVICE_RANKING, 2);
properties.insert("name", "CTK");
m_pImpl = new WelcomeCTKImpl();
context->registerService<WelcomeService>(m_pImpl, properties);
}
void WelcomeCTKActivator::stop(ctkPluginContext* context)
{
Q_UNUSED(context)
delete m_pImpl;
}
================================================
FILE: PluginAndService/OneInterface/Plugins/WelcomeCTK/welcome_ctk_activator.h
================================================
#ifndef WELCOME_CTK_ACTIVATOR_H
#define WELCOME_CTK_ACTIVATOR_H
#include <ctkPluginActivator.h>
class WelcomeCTKImpl;
class WelcomeCTKActivator : public QObject, public ctkPluginActivator
{
Q_OBJECT
Q_INTERFACES(ctkPluginActivator)
Q_PLUGIN_METADATA(IID "WELCOME_CTK")
public:
void start(ctkPluginContext* context);
void stop(ctkPluginContext* context);
private:
WelcomeCTKImpl *m_pImpl;
};
#endif // WELCOME_CTK_ACTIVATOR_H
================================================
FILE: PluginAndService/OneInterface/Plugins/WelcomeCTK/welcome_ctk_impl.cpp
================================================
#include "welcome_ctk_impl.h"
#include <QtDebug>
WelcomeCTKImpl::WelcomeCTKImpl()
{
}
void WelcomeCTKImpl::welcome()
{
qDebug() << "Welcome CTK!";
}
================================================
FILE: PluginAndService/OneInterface/Plugins/WelcomeCTK/welcome_ctk_impl.h
================================================
#ifndef WELCOME_CTK_IMPL_H
#define WELCOME_CTK_IMPL_H
#include "../../Service/welcome_service.h"
#include <QObject>
class ctkPluginContext;
class WelcomeCTKImpl : public QObject, public WelcomeService
{
Q_OBJECT
Q_INTERFACES(WelcomeService)
public:
WelcomeCTKImpl();
void welcome() Q_DECL_OVERRIDE;
};
#endif // WELCOME_CTK_IMPL_H
================================================
FILE: PluginAndService/OneInterface/Plugins/WelcomeQt/MANIFEST.MF
================================================
Plugin-SymbolicName: Welcome.Qt
Plugin-ActivationPolicy: eager
Plugin-Category: Demos
Plugin-ContactAddress: https://github.com/myhhub
Plugin-Description: A plugin for welcome Qt
Plugin-Name: WelcomeQt
Plugin-Vendor: myh
Plugin-Version: 1.0.0
================================================
FILE: PluginAndService/OneInterface/Plugins/WelcomeQt/Resource.qrc
================================================
<RCC>
<qresource prefix="/WelcomeQt/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
================================================
FILE: PluginAndService/OneInterface/Plugins/WelcomeQt/WelcomeQt.pro
================================================
QT += core
QT -= gui
TEMPLATE = lib
CONFIG += plugin
TARGET = WelcomeQt
DESTDIR = $$OUT_PWD/../../bin/plugins
include($$PWD/../../CTK.pri)
HEADERS += \
welcome_qt_impl.h \
welcome_qt_activator.h
SOURCES += \
welcome_qt_impl.cpp \
welcome_qt_activator.cpp
RESOURCES += Resource.qrc
================================================
FILE: PluginAndService/OneInt
gitextract_mzwwt_jh/
├── EventAdmin/
│ ├── SendEvent/
│ │ ├── App/
│ │ │ ├── App.pro
│ │ │ └── main.cpp
│ │ ├── CTK.pri
│ │ ├── Plugins/
│ │ │ ├── BlogEventHandler/
│ │ │ │ ├── BlogEventHandler.pro
│ │ │ │ ├── MANIFEST.MF
│ │ │ │ ├── Resource.qrc
│ │ │ │ ├── blog_event_handler.h
│ │ │ │ ├── blog_event_handler_activator.cpp
│ │ │ │ └── blog_event_handler_activator.h
│ │ │ ├── BlogManager/
│ │ │ │ ├── BlogManager.pro
│ │ │ │ ├── MANIFEST.MF
│ │ │ │ ├── Resource.qrc
│ │ │ │ ├── blog_manager.cpp
│ │ │ │ ├── blog_manager.h
│ │ │ │ ├── blog_manager_activator.cpp
│ │ │ │ └── blog_manager_activator.h
│ │ │ └── Plugins.pro
│ │ ├── SendEvent.pro
│ │ └── SendEvent.pro.user
│ └── SignalSlot/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── Plugins/
│ │ ├── BlogEventHandlerUsingSlots/
│ │ │ ├── BlogEventHandlerUsingSlots.pro
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── blog_event_handler_using_slots.h
│ │ │ ├── blog_event_handler_using_slots_activator.cpp
│ │ │ └── blog_event_handler_using_slots_activator.h
│ │ ├── BlogManagerUsingSignals/
│ │ │ ├── BlogManagerUsingSignals.pro
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── blog_manager_using_signals.cpp
│ │ │ ├── blog_manager_using_signals.h
│ │ │ ├── blog_manager_using_signals_activator.cpp
│ │ │ └── blog_manager_using_signals_activator.h
│ │ └── Plugins.pro
│ ├── SignalSlot.pro
│ └── SignalSlot.pro.user
├── EventListener/
│ ├── EventListener.pro
│ ├── EventListener.pro.user
│ ├── event_listener.cpp
│ ├── event_listener.h
│ └── main.cpp
├── GetMetaData/
│ ├── GetMetaData.pro
│ ├── GetMetaData.pro.user
│ └── main.cpp
├── PluginAndService/
│ ├── MultipleInterfaces/
│ │ ├── App/
│ │ │ ├── App.pro
│ │ │ └── main.cpp
│ │ ├── CTK.pri
│ │ ├── MultipleInterfaces.pro
│ │ ├── MultipleInterfaces.pro.user
│ │ └── Plugin/
│ │ ├── MANIFEST.MF
│ │ ├── Plugin.pro
│ │ ├── Resource.qrc
│ │ ├── greet_activator.cpp
│ │ ├── greet_activator.h
│ │ ├── greet_impl.cpp
│ │ ├── greet_impl.h
│ │ └── greet_service.h
│ └── OneInterface/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── OneInterface.pro
│ ├── OneInterface.pro.user
│ ├── Plugins/
│ │ ├── Plugins.pro
│ │ ├── WelcomeCTK/
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── WelcomeCTK.pro
│ │ │ ├── welcome_ctk_activator.cpp
│ │ │ ├── welcome_ctk_activator.h
│ │ │ ├── welcome_ctk_impl.cpp
│ │ │ └── welcome_ctk_impl.h
│ │ └── WelcomeQt/
│ │ ├── MANIFEST.MF
│ │ ├── Resource.qrc
│ │ ├── WelcomeQt.pro
│ │ ├── welcome_qt_activator.cpp
│ │ ├── welcome_qt_activator.h
│ │ ├── welcome_qt_impl.cpp
│ │ └── welcome_qt_impl.h
│ └── Service/
│ └── welcome_service.h
├── README.md
├── RequirePlugin/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── Plugins/
│ │ ├── PluginA/
│ │ │ ├── MANIFEST.MF
│ │ │ ├── PluginA.pro
│ │ │ ├── Resource.qrc
│ │ │ ├── plugin_a_activator.cpp
│ │ │ ├── plugin_a_activator.h
│ │ │ ├── plugin_a_impl.cpp
│ │ │ ├── plugin_a_impl.h
│ │ │ └── plugin_a_service.h
│ │ ├── PluginB/
│ │ │ ├── MANIFEST.MF
│ │ │ ├── PluginB.pro
│ │ │ ├── Resource.qrc
│ │ │ ├── plugin_b_activator.cpp
│ │ │ ├── plugin_b_activator.h
│ │ │ ├── plugin_b_impl.cpp
│ │ │ ├── plugin_b_impl.h
│ │ │ └── plugin_b_service.h
│ │ └── Plugins.pro
│ ├── RequirePlugin.pro
│ └── RequirePlugin.pro.user
├── SampleCTK/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── HelloCTK/
│ │ ├── HelloCTK.pro
│ │ ├── MANIFEST.MF
│ │ ├── Resource.qrc
│ │ ├── hello_activator.cpp
│ │ ├── hello_activator.h
│ │ ├── hello_impl.cpp
│ │ ├── hello_impl.h
│ │ └── hello_service.h
│ ├── SampleCTK.pro
│ └── SampleCTK.pro.user
├── ServiceFactory/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── Plugins/
│ │ ├── Hello/
│ │ │ ├── Hello.pro
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── hello_activator.h
│ │ │ ├── hello_impl.h
│ │ │ ├── hello_service.h
│ │ │ └── service_factory.h
│ │ ├── PluginA/
│ │ │ ├── MANIFEST.MF
│ │ │ ├── PluginA.pro
│ │ │ ├── Resource.qrc
│ │ │ ├── plugin_a_activator.cpp
│ │ │ ├── plugin_a_activator.h
│ │ │ ├── plugin_a_impl.cpp
│ │ │ ├── plugin_a_impl.h
│ │ │ └── plugin_a_service.h
│ │ ├── PluginB/
│ │ │ ├── MANIFEST.MF
│ │ │ ├── PluginB.pro
│ │ │ ├── Resource.qrc
│ │ │ ├── plugin_b_activator.cpp
│ │ │ ├── plugin_b_activator.h
│ │ │ ├── plugin_b_impl.cpp
│ │ │ ├── plugin_b_impl.h
│ │ │ └── plugin_b_service.h
│ │ └── Plugins.pro
│ ├── ServiceFactory.pro
│ └── ServiceFactory.pro.user
├── ServiceTracker/
│ ├── App/
│ │ ├── App.pro
│ │ └── main.cpp
│ ├── CTK.pri
│ ├── Plugins/
│ │ ├── Log/
│ │ │ ├── Log.pro
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── log_activator.cpp
│ │ │ ├── log_activator.h
│ │ │ ├── log_impl.cpp
│ │ │ ├── log_impl.h
│ │ │ └── log_service.h
│ │ ├── Login/
│ │ │ ├── Login.pro
│ │ │ ├── MANIFEST.MF
│ │ │ ├── Resource.qrc
│ │ │ ├── login_activator.cpp
│ │ │ ├── login_activator.h
│ │ │ ├── login_impl.cpp
│ │ │ ├── login_impl.h
│ │ │ ├── login_service.h
│ │ │ └── service_tracker.h
│ │ └── Plugins.pro
│ ├── ServiceTracker.pro
│ └── ServiceTracker.pro.user
└── UseCTKWidgets/
├── UseCTKWidgets.pro
├── UseCTKWidgets.pro.user
└── main.cpp
SYMBOL INDEX (31 symbols across 28 files)
FILE: EventAdmin/SendEvent/App/main.cpp
function main (line 7) | int main(int argc, char *argv[])
FILE: EventAdmin/SendEvent/Plugins/BlogManager/blog_manager.h
type Blog (line 6) | typedef struct Blog_Info {
function class (line 13) | class BlogManager
FILE: EventAdmin/SignalSlot/App/main.cpp
function main (line 8) | int main(int argc, char *argv[])
FILE: EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/blog_event_handler_using_slots.h
function class (line 9) | class BlogEventHandlerUsingSlots : public QObject
FILE: EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/blog_manager_using_signals.h
type Blog (line 8) | typedef struct Blog_Info {
function class (line 15) | class BlogManagerUsingSignals : public QObject
FILE: EventListener/event_listener.h
function class (line 9) | class EventListener : public QObject
FILE: EventListener/main.cpp
function main (line 12) | int main(int argc, char *argv[])
FILE: GetMetaData/main.cpp
function main (line 9) | int main(int argc, char *argv[])
FILE: PluginAndService/MultipleInterfaces/App/main.cpp
function main (line 12) | int main(int argc, char *argv[])
FILE: PluginAndService/MultipleInterfaces/Plugin/greet_service.h
function class (line 6) | class HelloService
function class (line 16) | class ByeService
FILE: PluginAndService/OneInterface/App/main.cpp
function main (line 12) | int main(int argc, char *argv[])
FILE: PluginAndService/OneInterface/Service/welcome_service.h
function class (line 6) | class WelcomeService
FILE: RequirePlugin/App/main.cpp
function main (line 13) | int main(int argc, char *argv[])
FILE: RequirePlugin/Plugins/PluginA/plugin_a_service.h
function class (line 6) | class PluginAService
FILE: RequirePlugin/Plugins/PluginB/plugin_b_service.h
function class (line 6) | class PluginBService
FILE: SampleCTK/App/main.cpp
function main (line 10) | int main(int argc, char *argv[])
FILE: SampleCTK/HelloCTK/hello_service.h
function class (line 6) | class HelloService
FILE: ServiceFactory/App/main.cpp
function main (line 10) | int main(int argc, char *argv[])
FILE: ServiceFactory/Plugins/Hello/hello_activator.h
function Q_OBJECT (line 11) | Q_OBJECT
FILE: ServiceFactory/Plugins/Hello/hello_service.h
function class (line 6) | class HelloService
FILE: ServiceFactory/Plugins/Hello/service_factory.h
function ungetService (line 34) | void ungetService(QSharedPointer<ctkPlugin> plugin, ctkServiceRegistrati...
FILE: ServiceFactory/Plugins/PluginA/plugin_a_service.h
function class (line 6) | class PluginAService
FILE: ServiceFactory/Plugins/PluginB/plugin_b_service.h
function class (line 6) | class PluginBService
FILE: ServiceTracker/App/main.cpp
function main (line 13) | int main(int argc, char *argv[])
FILE: ServiceTracker/Plugins/Log/log_service.h
function class (line 6) | class LogService
FILE: ServiceTracker/Plugins/Login/login_service.h
function class (line 6) | class LoginService
FILE: ServiceTracker/Plugins/Login/service_tracker.h
function class (line 8) | class ServiceTracker : public ctkServiceTracker<LogService *>
FILE: UseCTKWidgets/main.cpp
function main (line 10) | int main(int argc, char* argv[])
Condensed preview — 171 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (397K chars).
[
{
"path": "EventAdmin/SendEvent/App/App.pro",
"chars": 151,
"preview": "QT += core gui widgets\n\nTEMPLATE = app\nCONFIG += console\nTARGET = App\nDESTDIR = $$OUT_PWD/../bin\n\ninclude($$PWD/../CTK.p"
},
{
"path": "EventAdmin/SendEvent/App/main.cpp",
"chars": 1379,
"preview": "#include <QCoreApplication>\n#include <QtDebug>\n#include <ctkPluginFrameworkLauncher.h>\n#include <ctkPluginContext.h>\n#in"
},
{
"path": "EventAdmin/SendEvent/CTK.pri",
"chars": 511,
"preview": "# CTK 安装路径\nCTK_INSTALL_PATH = $$PWD/../../../CTKInstall\n\n# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)\nCTK_LIB_"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogEventHandler/BlogEventHandler.pro",
"chars": 302,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = BlogEventHandler\nDESTDIR = $$OUT_PWD/../../bin/plugins\n\ni"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogEventHandler/MANIFEST.MF",
"chars": 259,
"preview": "Plugin-SymbolicName: BlogEventHandler\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: http"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogEventHandler/Resource.qrc",
"chars": 115,
"preview": "<RCC>\n <qresource prefix=\"/BlogEventHandler/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogEventHandler/blog_event_handler.h",
"chars": 764,
"preview": "#ifndef BLOG_EVENT_HANDLER_H\n#define BLOG_EVENT_HANDLER_H\n\n#include <QObject>\n#include <service/event/ctkEventHandler.h"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogEventHandler/blog_event_handler_activator.cpp",
"chars": 621,
"preview": "#include \"blog_event_handler.h\"\n#include \"blog_event_handler_activator.h\"\n#include <service/event/ctkEventConstants.h>\n"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogEventHandler/blog_event_handler_activator.h",
"chars": 502,
"preview": "#ifndef BLOG_EVENT_HANDLER_ACTIVATOR_H\n#define BLOG_EVENT_HANDLER_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n\nclass B"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogManager/BlogManager.pro",
"chars": 303,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = BlogManager\nDESTDIR = $$OUT_PWD/../../bin/plugins\n\ninclud"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogManager/MANIFEST.MF",
"chars": 249,
"preview": "Plugin-SymbolicName: BlogManager\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://g"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogManager/Resource.qrc",
"chars": 110,
"preview": "<RCC>\n <qresource prefix=\"/BlogManager/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogManager/blog_manager.cpp",
"chars": 741,
"preview": "#include \"blog_manager.h\"\n#include <service/event/ctkEventAdmin.h>\n#include <QtDebug>\n\nBlogManager::BlogManager(ctkPlugi"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogManager/blog_manager.h",
"chars": 381,
"preview": "#ifndef BLOG_MANAGER_H\n#define BLOG_MANAGER_H\n\n#include <ctkPluginContext.h>\n\ntypedef struct Blog_Info {\n QString ti"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogManager/blog_manager_activator.cpp",
"chars": 469,
"preview": "#include \"blog_manager.h\"\n#include \"blog_manager_activator.h\"\n#include <QtDebug>\nvoid BlogManagerActivator::start(ctkPlu"
},
{
"path": "EventAdmin/SendEvent/Plugins/BlogManager/blog_manager_activator.h",
"chars": 462,
"preview": "#ifndef BLOG_MANAGER_ACTIVATOR_H\n#define BLOG_MANAGER_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n\nclass BlogManager;\n"
},
{
"path": "EventAdmin/SendEvent/Plugins/Plugins.pro",
"chars": 91,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n BlogManager \\\n BlogEventHandler\n\nCONFIG += ordered\n"
},
{
"path": "EventAdmin/SendEvent/SendEvent.pro",
"chars": 74,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n App \\\n Plugins\n\nCONFIG += ordered\n"
},
{
"path": "EventAdmin/SendEvent/SendEvent.pro.user",
"chars": 25459,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.13.0, 2021-03-10T11:44:54"
},
{
"path": "EventAdmin/SignalSlot/App/App.pro",
"chars": 151,
"preview": "QT += core gui widgets\n\nTEMPLATE = app\nCONFIG += console\nTARGET = App\nDESTDIR = $$OUT_PWD/../bin\n\ninclude($$PWD/../CTK.p"
},
{
"path": "EventAdmin/SignalSlot/App/main.cpp",
"chars": 1470,
"preview": "#include <QCoreApplication>\n#include <QtDebug>\n\n#include <ctkPluginFrameworkLauncher.h>\n#include <ctkPluginContext.h>\n#i"
},
{
"path": "EventAdmin/SignalSlot/CTK.pri",
"chars": 511,
"preview": "# CTK 安装路径\nCTK_INSTALL_PATH = $$PWD/../../../CTKInstall\n\n# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)\nCTK_LIB_"
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/BlogEventHandlerUsingSlots.pro",
"chars": 348,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = BlogEventHandlerUsingSlots\nDESTDIR = $$OUT_PWD/../../bin/"
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/MANIFEST.MF",
"chars": 292,
"preview": "Plugin-SymbolicName: com.Waleon.BlogEventHandlerUsingSlots\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-"
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/Resource.qrc",
"chars": 125,
"preview": "<RCC>\n <qresource prefix=\"/BlogEventHandlerUsingSlots/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</"
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/blog_event_handler_using_slots.h",
"chars": 744,
"preview": "#ifndef BLOG_EVENT_HANDLER_USING_SLOTS_H\n#define BLOG_EVENT_HANDLER_USING_SLOTS_H\n\n#include <QObject>\n#include <QDebug>"
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/blog_event_handler_using_slots_activator.cpp",
"chars": 849,
"preview": "#include \"blog_event_handler_using_slots.h\"\n#include \"blog_event_handler_using_slots_activator.h\"\n#include <service/even"
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogEventHandlerUsingSlots/blog_event_handler_using_slots_activator.h",
"chars": 580,
"preview": "#ifndef BLOG_EVENT_HANDLER_USING_SLOTS_ACTIVATOR_H\n#define BLOG_EVENT_HANDLER_USING_SLOTS_ACTIVATOR_H\n\n#include <ctkPlu"
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/BlogManagerUsingSignals.pro",
"chars": 370,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = BlogManagerUsingSignals\nDESTDIR = $$OUT_PWD/../../bin/plu"
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/MANIFEST.MF",
"chars": 286,
"preview": "Plugin-SymbolicName: com.Waleon.BlogManagerUsingSignals\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-Con"
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/Resource.qrc",
"chars": 122,
"preview": "<RCC>\n <qresource prefix=\"/BlogManagerUsingSignals/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC"
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/blog_manager_using_signals.cpp",
"chars": 806,
"preview": "#include \"blog_manager_using_signals.h\"\n\nBlogManagerUsingSignals::BlogManagerUsingSignals(ctkPluginContext *context)\n{\n "
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/blog_manager_using_signals.h",
"chars": 574,
"preview": "#ifndef BLOG_MANAGER_USING_SIGNALS_SIGNALS_H\n#define BLOG_MANAGER_USING_SIGNALS_SIGNALS_H\n\n#include <QObject>\n#include "
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/blog_manager_using_signals_activator.cpp",
"chars": 517,
"preview": "#include \"blog_manager_using_signals.h\"\n#include \"blog_manager_using_signals_activator.h\"\n\nvoid BlogManagerUsingSignals"
},
{
"path": "EventAdmin/SignalSlot/Plugins/BlogManagerUsingSignals/blog_manager_using_signals_activator.h",
"chars": 554,
"preview": "#ifndef BLOG_MANAGER_USING_SIGNALS_ACTIVATOR_H\n#define BLOG_MANAGER_USING_SIGNALS_ACTIVATOR_H\n\n#include <ctkPluginActiv"
},
{
"path": "EventAdmin/SignalSlot/Plugins/Plugins.pro",
"chars": 113,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n BlogManagerUsingSignals \\\n BlogEventHandlerUsingSlots\n\nCONFIG += ordered\n"
},
{
"path": "EventAdmin/SignalSlot/SignalSlot.pro",
"chars": 74,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n App \\\n Plugins\n\nCONFIG += ordered\n"
},
{
"path": "EventAdmin/SignalSlot/SignalSlot.pro.user",
"chars": 25468,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.13.0, 2021-03-10T11:54:18"
},
{
"path": "EventListener/EventListener.pro",
"chars": 665,
"preview": "QT += core\nQT -= gui\n\nTARGET = EventListener\nCONFIG += console\nTEMPLATE = app\n\n# CTK 安装路径\nCTK_INSTALL_PATH = $$PWD/../.."
},
{
"path": "EventListener/EventListener.pro.user",
"chars": 25397,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.13.0, 2021-03-10T12:58:33"
},
{
"path": "EventListener/event_listener.cpp",
"chars": 1254,
"preview": "#include \"event_listener.h\"\n\nEventListener::EventListener(QObject *parent)\n : QObject(parent)\n{\n}\n\nEventListener::~E"
},
{
"path": "EventListener/event_listener.h",
"chars": 567,
"preview": "#ifndef EVENT_LISTENER_H\n#define EVENT_LISTENER_H\n\n#include <QObject>\n#include <ctkPluginFrameworkEvent.h>\n#include <ct"
},
{
"path": "EventListener/main.cpp",
"chars": 1869,
"preview": "#include <QCoreApplication>\n#include <QDirIterator>\n#include <QtDebug>\n\n#include <ctkPluginFrameworkFactory.h>\n#include"
},
{
"path": "GetMetaData/GetMetaData.pro",
"chars": 649,
"preview": "QT += core\nQT -= gui\nDESTDIR = $$PWD/bin\nTARGET = GetMetaData\nCONFIG += c++11 console\nCONFIG -= app_bundle\nTEMPLATE = ap"
},
{
"path": "GetMetaData/GetMetaData.pro.user",
"chars": 25332,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.13.0, 2021-03-08T16:36:38"
},
{
"path": "GetMetaData/main.cpp",
"chars": 2133,
"preview": "#include <QCoreApplication>\n#include <QDirIterator>\n#include <QtDebug>\n#include <ctkPluginFrameworkFactory.h>\n#include <"
},
{
"path": "PluginAndService/MultipleInterfaces/App/App.pro",
"chars": 151,
"preview": "QT += core gui widgets\n\nTEMPLATE = app\nCONFIG += console\nTARGET = App\nDESTDIR = $$OUT_PWD/../bin\n\ninclude($$PWD/../CTK.p"
},
{
"path": "PluginAndService/MultipleInterfaces/App/main.cpp",
"chars": 2013,
"preview": "#include <QCoreApplication>\n#include <QDirIterator>\n#include <QtDebug>\n\n#include <ctkPluginFrameworkFactory.h>\n#include"
},
{
"path": "PluginAndService/MultipleInterfaces/CTK.pri",
"chars": 511,
"preview": "# CTK 安装路径\nCTK_INSTALL_PATH = $$PWD/../../../CTKInstall\n\n# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)\nCTK_LIB_"
},
{
"path": "PluginAndService/MultipleInterfaces/MultipleInterfaces.pro",
"chars": 73,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n App \\\n Plugin\n\nCONFIG += ordered\n"
},
{
"path": "PluginAndService/MultipleInterfaces/MultipleInterfaces.pro.user",
"chars": 25594,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.13.0, 2021-03-10T10:53:25"
},
{
"path": "PluginAndService/MultipleInterfaces/Plugin/MANIFEST.MF",
"chars": 229,
"preview": "Plugin-SymbolicName: Greet\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://github.c"
},
{
"path": "PluginAndService/MultipleInterfaces/Plugin/Plugin.pro",
"chars": 294,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = Greet\nDESTDIR = $$OUT_PWD/../bin/plugins\n\ninclude($$PWD/."
},
{
"path": "PluginAndService/MultipleInterfaces/Plugin/Resource.qrc",
"chars": 104,
"preview": "<RCC>\n <qresource prefix=\"/Greet/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "PluginAndService/MultipleInterfaces/Plugin/greet_activator.cpp",
"chars": 362,
"preview": "#include \"greet_impl.h\"\n#include \"greet_activator.h\"\n\nvoid GreetActivator::start(ctkPluginContext* context)\n{\n m_pIm"
},
{
"path": "PluginAndService/MultipleInterfaces/Plugin/greet_activator.h",
"chars": 417,
"preview": "#ifndef GREET_ACTIVATOR_H\n#define GREET_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n\nclass GreetImpl;\n\nclass GreetActi"
},
{
"path": "PluginAndService/MultipleInterfaces/Plugin/greet_impl.cpp",
"chars": 193,
"preview": "#include \"greet_impl.h\"\n#include <QtDebug>\n\nGreetImpl::GreetImpl()\n{\n\n}\n\nvoid GreetImpl::sayHello()\n{\n qDebug() << \""
},
{
"path": "PluginAndService/MultipleInterfaces/Plugin/greet_impl.h",
"chars": 364,
"preview": "#ifndef GREET_IMPL_H\n#define GREET_IMPL_H\n\n#include \"greet_service.h\"\n#include <QObject>\n\nclass GreetImpl : public QObj"
},
{
"path": "PluginAndService/MultipleInterfaces/Plugin/greet_service.h",
"chars": 517,
"preview": "#ifndef GREET_SERVICE_H\n#define GREET_SERVICE_H\n\n#include <QtPlugin>\n\nclass HelloService\n{\npublic:\n virtual ~HelloSe"
},
{
"path": "PluginAndService/OneInterface/App/App.pro",
"chars": 151,
"preview": "QT += core gui widgets\n\nTEMPLATE = app\nCONFIG += console\nTARGET = App\nDESTDIR = $$OUT_PWD/../bin\n\ninclude($$PWD/../CTK.p"
},
{
"path": "PluginAndService/OneInterface/App/main.cpp",
"chars": 3024,
"preview": "#include <QCoreApplication>\n#include <QDirIterator>\n#include <QtDebug>\n\n#include <ctkPluginFrameworkFactory.h>\n#include "
},
{
"path": "PluginAndService/OneInterface/CTK.pri",
"chars": 511,
"preview": "# CTK 安装路径\nCTK_INSTALL_PATH = $$PWD/../../../CTKInstall\n\n# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)\nCTK_LIB_"
},
{
"path": "PluginAndService/OneInterface/OneInterface.pro",
"chars": 74,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n App \\\n Plugins\n\nCONFIG += ordered\n"
},
{
"path": "PluginAndService/OneInterface/OneInterface.pro.user",
"chars": 25540,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.13.0, 2021-03-10T10:44:37"
},
{
"path": "PluginAndService/OneInterface/Plugins/Plugins.pro",
"chars": 83,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n WelcomeCTK \\\n WelcomeQt\n\nCONFIG += ordered\n"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeCTK/MANIFEST.MF",
"chars": 246,
"preview": "Plugin-SymbolicName: Welcome.CTK\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://gi"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeCTK/Resource.qrc",
"chars": 109,
"preview": "<RCC>\n <qresource prefix=\"/WelcomeCTK/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeCTK/WelcomeCTK.pro",
"chars": 307,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = WelcomeCTK\nDESTDIR = $$OUT_PWD/../../bin/plugins\n\ninclude"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeCTK/welcome_ctk_activator.cpp",
"chars": 490,
"preview": "#include \"welcome_ctk_impl.h\"\n#include \"welcome_ctk_activator.h\"\n#include <QtDebug>\n\nvoid WelcomeCTKActivator::start(ct"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeCTK/welcome_ctk_activator.h",
"chars": 456,
"preview": "#ifndef WELCOME_CTK_ACTIVATOR_H\n#define WELCOME_CTK_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n\nclass WelcomeCTKImpl;"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeCTK/welcome_ctk_impl.cpp",
"chars": 157,
"preview": "#include \"welcome_ctk_impl.h\"\n#include <QtDebug>\n\nWelcomeCTKImpl::WelcomeCTKImpl()\n{\n\n}\n\nvoid WelcomeCTKImpl::welcome()"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeCTK/welcome_ctk_impl.h",
"chars": 353,
"preview": "#ifndef WELCOME_CTK_IMPL_H\n#define WELCOME_CTK_IMPL_H\n\n#include \"../../Service/welcome_service.h\"\n#include <QObject>\n\nc"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeQt/MANIFEST.MF",
"chars": 243,
"preview": "Plugin-SymbolicName: Welcome.Qt\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://git"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeQt/Resource.qrc",
"chars": 108,
"preview": "<RCC>\n <qresource prefix=\"/WelcomeQt/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeQt/WelcomeQt.pro",
"chars": 302,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = WelcomeQt\nDESTDIR = $$OUT_PWD/../../bin/plugins\n\ninclude("
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeQt/welcome_qt_activator.cpp",
"chars": 483,
"preview": "#include \"welcome_qt_impl.h\"\n#include \"welcome_qt_activator.h\"\n#include <QtDebug>\n\nvoid WelcomeQtActivator::start(ctkPlu"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeQt/welcome_qt_activator.h",
"chars": 452,
"preview": "#ifndef WELCOME_CTK_ACTIVATOR_H\n#define WELCOME_CTK_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n\nclass WelcomeQtImpl;\n"
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeQt/welcome_qt_impl.cpp",
"chars": 152,
"preview": "#include \"welcome_qt_impl.h\"\n#include <QtDebug>\n\nWelcomeQtImpl::WelcomeQtImpl()\n{\n\n}\n\nvoid WelcomeQtImpl::welcome()\n{\n "
},
{
"path": "PluginAndService/OneInterface/Plugins/WelcomeQt/welcome_qt_impl.h",
"chars": 348,
"preview": "#ifndef WELCOME_QT_IMPL_H\n#define WELCOME_QT_IMPL_H\n\n#include \"../../Service/welcome_service.h\"\n#include <QObject>\n\ncla"
},
{
"path": "PluginAndService/OneInterface/Service/welcome_service.h",
"chars": 331,
"preview": "#ifndef WELCOME_SERVICE_H\n#define WELCOME_SERVICE_H\n\n#include <QtPlugin>\n\nclass WelcomeService\n{\npublic:\n virtual ~W"
},
{
"path": "README.md",
"chars": 4605,
"preview": "[CTK完整教程(OSGI for C++ 实现 C++ Qt 模块化)](https://www.ljjyy.com/archives/2021/03/100645.html)\n\nCTK框架实际应用比较可靠,但网上资料很少。本教程围绕 C"
},
{
"path": "RequirePlugin/App/App.pro",
"chars": 153,
"preview": "QT += core\nQT -= gui\n\nTARGET = RequirePlugin\nCONFIG += console\nTEMPLATE = app\nDESTDIR = $$OUT_PWD/../bin\n\ninclude($$PWD/"
},
{
"path": "RequirePlugin/App/main.cpp",
"chars": 2322,
"preview": "#include <QCoreApplication>\n#include <QDirIterator>\n#include <QtDebug>\n\n#include <ctkPluginFrameworkFactory.h>\n#include "
},
{
"path": "RequirePlugin/CTK.pri",
"chars": 505,
"preview": "# CTK 安装路径\nCTK_INSTALL_PATH = $$PWD/../../CTKInstall\n\n# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)\nCTK_LIB_PAT"
},
{
"path": "RequirePlugin/Plugins/PluginA/MANIFEST.MF",
"chars": 234,
"preview": "Plugin-SymbolicName: Plugin.A\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://gith"
},
{
"path": "RequirePlugin/Plugins/PluginA/PluginA.pro",
"chars": 317,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = PluginA\nDESTDIR = $$OUT_PWD/../../bin/plugins\n\ninclude($$"
},
{
"path": "RequirePlugin/Plugins/PluginA/Resource.qrc",
"chars": 106,
"preview": "<RCC>\n <qresource prefix=\"/PluginA/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "RequirePlugin/Plugins/PluginA/plugin_a_activator.cpp",
"chars": 375,
"preview": "#include \"plugin_a_impl.h\"\n#include \"plugin_a_activator.h\"\n#include <ctkPluginContext.h>\n\nvoid PluginAActivator::start("
},
{
"path": "RequirePlugin/Plugins/PluginA/plugin_a_activator.h",
"chars": 437,
"preview": "#ifndef PLUGIN_A_ACTIVATOR_H\n#define PLUGIN_A_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n\nclass PluginAImpl;\n\nclass P"
},
{
"path": "RequirePlugin/Plugins/PluginA/plugin_a_impl.cpp",
"chars": 153,
"preview": "#include \"plugin_a_impl.h\"\n#include <QtDebug>\n\nPluginAImpl::PluginAImpl()\n{\n\n}\n\nvoid PluginAImpl::doSomething()\n{\n q"
},
{
"path": "RequirePlugin/Plugins/PluginA/plugin_a_impl.h",
"chars": 304,
"preview": "#ifndef PLUGIN_A_IMPL_H\n#define PLUGIN_A_IMPL_H\n\n#include \"plugin_a_service.h\"\n#include <QObject>\n\nclass PluginAImpl : "
},
{
"path": "RequirePlugin/Plugins/PluginA/plugin_a_service.h",
"chars": 338,
"preview": "#ifndef PLUGIN_A_SERVICE_H\n#define PLUGIN_A_SERVICE_H\n\n#include <QtPlugin>\n\nclass PluginAService\n{\npublic:\n virtual "
},
{
"path": "RequirePlugin/Plugins/PluginB/MANIFEST.MF",
"chars": 311,
"preview": "Plugin-SymbolicName: Plugin.B\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://githu"
},
{
"path": "RequirePlugin/Plugins/PluginB/PluginB.pro",
"chars": 317,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = PluginB\nDESTDIR = $$OUT_PWD/../../bin/plugins\n\ninclude($$"
},
{
"path": "RequirePlugin/Plugins/PluginB/Resource.qrc",
"chars": 106,
"preview": "<RCC>\n <qresource prefix=\"/PluginB/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "RequirePlugin/Plugins/PluginB/plugin_b_activator.cpp",
"chars": 375,
"preview": "#include \"plugin_b_impl.h\"\n#include \"plugin_b_activator.h\"\n#include <ctkPluginContext.h>\n\nvoid PluginBActivator::start("
},
{
"path": "RequirePlugin/Plugins/PluginB/plugin_b_activator.h",
"chars": 437,
"preview": "#ifndef PLUGIN_B_ACTIVATOR_H\n#define PLUGIN_B_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n\nclass PluginBImpl;\n\nclass P"
},
{
"path": "RequirePlugin/Plugins/PluginB/plugin_b_impl.cpp",
"chars": 153,
"preview": "#include \"plugin_b_impl.h\"\n#include <QtDebug>\n\nPluginBImpl::PluginBImpl()\n{\n\n}\n\nvoid PluginBImpl::doSomething()\n{\n q"
},
{
"path": "RequirePlugin/Plugins/PluginB/plugin_b_impl.h",
"chars": 304,
"preview": "#ifndef PLUGIN_B_IMPL_H\n#define PLUGIN_B_IMPL_H\n\n#include \"plugin_b_service.h\"\n#include <QObject>\n\nclass PluginBImpl : "
},
{
"path": "RequirePlugin/Plugins/PluginB/plugin_b_service.h",
"chars": 338,
"preview": "#ifndef PLUGIN_B_SERVICE_H\n#define PLUGIN_B_SERVICE_H\n\n#include <QtPlugin>\n\nclass PluginBService\n{\npublic:\n virtual "
},
{
"path": "RequirePlugin/Plugins/Plugins.pro",
"chars": 78,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n PluginA \\\n PluginB\n\nCONFIG += ordered\n"
},
{
"path": "RequirePlugin/RequirePlugin.pro",
"chars": 74,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n App \\\n Plugins\n\nCONFIG += ordered\n"
},
{
"path": "RequirePlugin/RequirePlugin.pro.user",
"chars": 25396,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.13.0, 2021-03-09T09:00:13"
},
{
"path": "SampleCTK/App/App.pro",
"chars": 143,
"preview": "QT += core\nQT -= gui\n\nTARGET = App\nCONFIG += console\nTEMPLATE = app\nDESTDIR = $$OUT_PWD/../bin\n\ninclude($$PWD/../CTK.pri"
},
{
"path": "SampleCTK/App/main.cpp",
"chars": 2011,
"preview": "#include <QCoreApplication>\n#include <QDirIterator>\n#include <QtDebug>\n#include <ctkPluginFrameworkFactory.h>\n#include <"
},
{
"path": "SampleCTK/CTK.pri",
"chars": 505,
"preview": "# CTK 安装路径\nCTK_INSTALL_PATH = $$PWD/../../CTKInstall\n\n# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)\nCTK_LIB_PAT"
},
{
"path": "SampleCTK/HelloCTK/HelloCTK.pro",
"chars": 368,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = HelloCTK\nDESTDIR = $$OUT_PWD/../bin/plugins\n\ninclude($$PW"
},
{
"path": "SampleCTK/HelloCTK/MANIFEST.MF",
"chars": 239,
"preview": "Plugin-SymbolicName: HelloCTK\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://githu"
},
{
"path": "SampleCTK/HelloCTK/Resource.qrc",
"chars": 106,
"preview": "<RCC>\n <qresource prefix=\"/HelloCTK/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>"
},
{
"path": "SampleCTK/HelloCTK/hello_activator.cpp",
"chars": 358,
"preview": "#include \"hello_activator.h\"\n#include \"hello_impl.h\"\n\nvoid HelloActivator::start(ctkPluginContext* context)\n{\n s.rese"
},
{
"path": "SampleCTK/HelloCTK/hello_activator.h",
"chars": 442,
"preview": "#ifndef HELLO_ACTIVATOR_H\n#define HELLO_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n#include \"hello_service.h\"\n\nclass "
},
{
"path": "SampleCTK/HelloCTK/hello_impl.cpp",
"chars": 238,
"preview": "#include \"hello_impl.h\"\n#include <ctkPluginContext.h>\n#include <QtDebug>\n\nHelloImpl::HelloImpl(ctkPluginContext* context"
},
{
"path": "SampleCTK/HelloCTK/hello_impl.h",
"chars": 331,
"preview": "#ifndef HELLO_IMPL_H\n#define HELLO_IMPL_H\n\n#include \"hello_service.h\"\n#include <QObject>\n\nclass ctkPluginContext;\n\nclas"
},
{
"path": "SampleCTK/HelloCTK/hello_service.h",
"chars": 314,
"preview": "#ifndef HELLO_SERVICE_H\n#define HELLO_SERVICE_H\n\n#include <QtPlugin>\n\nclass HelloService\n{\npublic:\n virtual ~HelloSe"
},
{
"path": "SampleCTK/SampleCTK.pro",
"chars": 56,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n App \\\n HelloCTK\n"
},
{
"path": "SampleCTK/SampleCTK.pro.user",
"chars": 25360,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.13.0, 2021-03-10T10:20:48"
},
{
"path": "ServiceFactory/App/App.pro",
"chars": 154,
"preview": "QT += core\nQT -= gui\n\nTARGET = ServiceFactory\nCONFIG += console\nTEMPLATE = app\nDESTDIR = $$OUT_PWD/../bin\n\ninclude($$PWD"
},
{
"path": "ServiceFactory/App/main.cpp",
"chars": 1832,
"preview": "#include <QCoreApplication>\n#include <QDirIterator>\n#include <QtDebug>\n\n#include <ctkPluginFrameworkFactory.h>\n#include "
},
{
"path": "ServiceFactory/CTK.pri",
"chars": 505,
"preview": "# CTK 安装路径\nCTK_INSTALL_PATH = $$PWD/../../CTKInstall\n\n# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)\nCTK_LIB_PAT"
},
{
"path": "ServiceFactory/Plugins/Hello/Hello.pro",
"chars": 265,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = Hello\nDESTDIR = $$OUT_PWD/../../bin/plugins\n\ninclude($$PW"
},
{
"path": "ServiceFactory/Plugins/Hello/MANIFEST.MF",
"chars": 234,
"preview": "Plugin-SymbolicName: Hello\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://github."
},
{
"path": "ServiceFactory/Plugins/Hello/Resource.qrc",
"chars": 104,
"preview": "<RCC>\n <qresource prefix=\"/Hello/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "ServiceFactory/Plugins/Hello/hello_activator.h",
"chars": 619,
"preview": "#ifndef HELLO_ACTIVATOR_H\n#define HELLO_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n#include <ctkPluginContext.h>\n#inc"
},
{
"path": "ServiceFactory/Plugins/Hello/hello_impl.h",
"chars": 551,
"preview": "#ifndef HELLO_IMPL_H\n#define HELLO_IMPL_H\n\n#include \"hello_service.h\"\n#include <QObject>\n#include <QtDebug>\n\n// HelloWo"
},
{
"path": "ServiceFactory/Plugins/Hello/hello_service.h",
"chars": 314,
"preview": "#ifndef HELLO_SERVICE_H\n#define HELLO_SERVICE_H\n\n#include <QtPlugin>\n\nclass HelloService\n{\npublic:\n virtual ~HelloSe"
},
{
"path": "ServiceFactory/Plugins/Hello/service_factory.h",
"chars": 1709,
"preview": "#ifndef SERVICE_FACTORY_H\n#define SERVICE_FACTORY_H\n\n#include <ctkServiceFactory.h>\n#include <ctkPluginConstants.h>\n#in"
},
{
"path": "ServiceFactory/Plugins/PluginA/MANIFEST.MF",
"chars": 240,
"preview": "Plugin-SymbolicName: Plugin.A\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://gith"
},
{
"path": "ServiceFactory/Plugins/PluginA/PluginA.pro",
"chars": 317,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = PluginA\nDESTDIR = $$OUT_PWD/../../bin/plugins\n\ninclude($$"
},
{
"path": "ServiceFactory/Plugins/PluginA/Resource.qrc",
"chars": 106,
"preview": "<RCC>\n <qresource prefix=\"/PluginA/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "ServiceFactory/Plugins/PluginA/plugin_a_activator.cpp",
"chars": 1110,
"preview": "#include \"plugin_a_impl.h\"\n#include \"plugin_a_activator.h\"\n#include \"../Hello/hello_service.h\"\n#include <ctkPluginContex"
},
{
"path": "ServiceFactory/Plugins/PluginA/plugin_a_activator.h",
"chars": 437,
"preview": "#ifndef PLUGIN_A_ACTIVATOR_H\n#define PLUGIN_A_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n\nclass PluginAImpl;\n\nclass P"
},
{
"path": "ServiceFactory/Plugins/PluginA/plugin_a_impl.cpp",
"chars": 154,
"preview": "#include \"plugin_a_impl.h\"\n#include <QtDebug>\n\nPluginAImpl::PluginAImpl()\n{\n\n}\n\nvoid PluginAImpl::doSomething()\n{\n q"
},
{
"path": "ServiceFactory/Plugins/PluginA/plugin_a_impl.h",
"chars": 304,
"preview": "#ifndef PLUGIN_A_IMPL_H\n#define PLUGIN_A_IMPL_H\n\n#include \"plugin_a_service.h\"\n#include <QObject>\n\nclass PluginAImpl : "
},
{
"path": "ServiceFactory/Plugins/PluginA/plugin_a_service.h",
"chars": 338,
"preview": "#ifndef PLUGIN_A_SERVICE_H\n#define PLUGIN_A_SERVICE_H\n\n#include <QtPlugin>\n\nclass PluginAService\n{\npublic:\n virtual "
},
{
"path": "ServiceFactory/Plugins/PluginB/MANIFEST.MF",
"chars": 239,
"preview": "Plugin-SymbolicName: Plugin.B\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://gith"
},
{
"path": "ServiceFactory/Plugins/PluginB/PluginB.pro",
"chars": 317,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = PluginB\nDESTDIR = $$OUT_PWD/../../bin/plugins\n\ninclude($$"
},
{
"path": "ServiceFactory/Plugins/PluginB/Resource.qrc",
"chars": 106,
"preview": "<RCC>\n <qresource prefix=\"/PluginB/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "ServiceFactory/Plugins/PluginB/plugin_b_activator.cpp",
"chars": 706,
"preview": "#include \"plugin_b_impl.h\"\n#include \"plugin_b_activator.h\"\n#include \"../Hello/hello_service.h\"\n#include <ctkPluginConte"
},
{
"path": "ServiceFactory/Plugins/PluginB/plugin_b_activator.h",
"chars": 437,
"preview": "#ifndef PLUGIN_B_ACTIVATOR_H\n#define PLUGIN_B_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n\nclass PluginBImpl;\n\nclass P"
},
{
"path": "ServiceFactory/Plugins/PluginB/plugin_b_impl.cpp",
"chars": 153,
"preview": "#include \"plugin_b_impl.h\"\n#include <QtDebug>\n\nPluginBImpl::PluginBImpl()\n{\n\n}\n\nvoid PluginBImpl::doSomething()\n{\n q"
},
{
"path": "ServiceFactory/Plugins/PluginB/plugin_b_impl.h",
"chars": 304,
"preview": "#ifndef PLUGIN_B_IMPL_H\n#define PLUGIN_B_IMPL_H\n\n#include \"plugin_b_service.h\"\n#include <QObject>\n\nclass PluginBImpl : "
},
{
"path": "ServiceFactory/Plugins/PluginB/plugin_b_service.h",
"chars": 338,
"preview": "#ifndef PLUGIN_B_SERVICE_H\n#define PLUGIN_B_SERVICE_H\n\n#include <QtPlugin>\n\nclass PluginBService\n{\npublic:\n virtual "
},
{
"path": "ServiceFactory/Plugins/Plugins.pro",
"chars": 90,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n Hello \\\n PluginA \\\n PluginB\n\nCONFIG += ordered\n"
},
{
"path": "ServiceFactory/ServiceFactory.pro",
"chars": 74,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n App \\\n Plugins\n\nCONFIG += ordered\n"
},
{
"path": "ServiceFactory/ServiceFactory.pro.user",
"chars": 25405,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.13.0, 2021-03-10T12:34:18"
},
{
"path": "ServiceTracker/App/App.pro",
"chars": 154,
"preview": "QT += core\nQT -= gui\n\nTARGET = ServiceTracker\nCONFIG += console\nTEMPLATE = app\nDESTDIR = $$OUT_PWD/../bin\n\ninclude($$PWD"
},
{
"path": "ServiceTracker/App/main.cpp",
"chars": 1913,
"preview": "// main.cpp\n#include <QCoreApplication>\n#include <QDirIterator>\n#include <QtDebug>\n\n#include <ctkPluginFrameworkFactory"
},
{
"path": "ServiceTracker/CTK.pri",
"chars": 505,
"preview": "# CTK 安装路径\nCTK_INSTALL_PATH = $$PWD/../../CTKInstall\n\n# CTK 插件相关库所在路径(例如:CTKCore.lib、CTKPluginFramework.lib)\nCTK_LIB_PAT"
},
{
"path": "ServiceTracker/Plugins/Log/Log.pro",
"chars": 288,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = Log\nDESTDIR = $$OUT_PWD/../../bin/plugins\n\ninclude($$PWD/"
},
{
"path": "ServiceTracker/Plugins/Log/MANIFEST.MF",
"chars": 224,
"preview": "Plugin-SymbolicName: Log\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://github.co"
},
{
"path": "ServiceTracker/Plugins/Log/Resource.qrc",
"chars": 102,
"preview": "<RCC>\n <qresource prefix=\"/Log/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "ServiceTracker/Plugins/Log/log_activator.cpp",
"chars": 368,
"preview": "#include \"log_impl.h\"\n#include \"log_activator.h\"\n#include <ctkPluginContext.h>\n#include <QtDebug>\n\nvoid LogActivator::s"
},
{
"path": "ServiceTracker/Plugins/Log/log_activator.h",
"chars": 405,
"preview": "#ifndef LOG_ACTIVATOR_H\n#define LOG_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n\nclass LogImpl;\n\nclass LogActivator : "
},
{
"path": "ServiceTracker/Plugins/Log/log_impl.cpp",
"chars": 158,
"preview": "#include \"log_impl.h\"\n#include <QtDebug>\n\nLogImpl::LogImpl()\n{\n\n}\n\nvoid LogImpl::debug(QString msg)\n{\n qDebug() << \""
},
{
"path": "ServiceTracker/Plugins/Log/log_impl.h",
"chars": 273,
"preview": "#ifndef LOG_IMPL_H\n#define LOG_IMPL_H\n\n#include \"log_service.h\"\n#include <QObject>\n\nclass LogImpl : public QObject, pub"
},
{
"path": "ServiceTracker/Plugins/Log/log_service.h",
"chars": 304,
"preview": "#ifndef LOG_SERVICE_H\n#define LOG_SERVICE_H\n\n#include <QtPlugin>\n\nclass LogService\n{\npublic:\n virtual ~LogService() "
},
{
"path": "ServiceTracker/Plugins/Login/Login.pro",
"chars": 324,
"preview": "QT += core\nQT -= gui\n\nTEMPLATE = lib\nCONFIG += plugin\nTARGET = Login\nDESTDIR = $$OUT_PWD/../../bin/plugins\n\ninclude($$PW"
},
{
"path": "ServiceTracker/Plugins/Login/MANIFEST.MF",
"chars": 230,
"preview": "Plugin-SymbolicName: Login\nPlugin-ActivationPolicy: eager\nPlugin-Category: Demos\nPlugin-ContactAddress: https://github."
},
{
"path": "ServiceTracker/Plugins/Login/Resource.qrc",
"chars": 104,
"preview": "<RCC>\n <qresource prefix=\"/Login/META-INF\">\n <file>MANIFEST.MF</file>\n </qresource>\n</RCC>\n"
},
{
"path": "ServiceTracker/Plugins/Login/login_activator.cpp",
"chars": 590,
"preview": "#include \"login_impl.h\"\n#include \"login_activator.h\"\n#include \"service_tracker.h\"\n#include <ctkPluginContext.h>\n\nvoid L"
},
{
"path": "ServiceTracker/Plugins/Login/login_activator.h",
"chars": 516,
"preview": "#ifndef LOGIN_ACTIVATOR_H\n#define LOGIN_ACTIVATOR_H\n\n#include <ctkPluginActivator.h>\n\nclass LoginImpl;\nclass ServiceTra"
},
{
"path": "ServiceTracker/Plugins/Login/login_impl.cpp",
"chars": 598,
"preview": "#include \"login_impl.h\"\n#include \"service_tracker.h\"\n\nLoginImpl::LoginImpl(ServiceTracker *tracker)\n : m_pTracker(tr"
},
{
"path": "ServiceTracker/Plugins/Login/login_impl.h",
"chars": 414,
"preview": "#ifndef LOGIN_IMPL_H\n#define LOGIN_IMPL_H\n\n#include \"login_service.h\"\n#include <QObject>\n\nclass ServiceTracker;\n\nclass "
},
{
"path": "ServiceTracker/Plugins/Login/login_service.h",
"chars": 359,
"preview": "#ifndef LOGIN_SERVICE_H\n#define LOGIN_SERVICE_H\n\n#include <QtPlugin>\n\nclass LoginService\n{\npublic:\n virtual ~LoginSe"
},
{
"path": "ServiceTracker/Plugins/Login/service_tracker.h",
"chars": 1351,
"preview": "#ifndef SERVICE_TRACKER_H\n#define SERVICE_TRACKER_H\n\n#include <ctkPluginContext.h>\n#include <ctkServiceTracker.h>\n#incl"
},
{
"path": "ServiceTracker/Plugins/Plugins.pro",
"chars": 72,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n Login \\\n Log\n\nCONFIG += ordered\n"
},
{
"path": "ServiceTracker/ServiceTracker.pro",
"chars": 74,
"preview": "TEMPLATE = subdirs\n\nSUBDIRS += \\\n App \\\n Plugins\n\nCONFIG += ordered\n"
},
{
"path": "ServiceTracker/ServiceTracker.pro.user",
"chars": 25405,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.13.0, 2021-03-09T14:06:11"
},
{
"path": "UseCTKWidgets/UseCTKWidgets.pro",
"chars": 445,
"preview": "QT += core gui widgets\n\nTARGET = UseCTKWidgets\nTEMPLATE = app\n\n# CTK 安装路径\nCTK_INSTALL_PATH = $$PWD/../../CTKInstall\n\n# C"
},
{
"path": "UseCTKWidgets/UseCTKWidgets.pro.user",
"chars": 25397,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE QtCreatorProject>\n<!-- Written by QtCreator 4.13.0, 2021-03-09T16:44:11"
},
{
"path": "UseCTKWidgets/main.cpp",
"chars": 1423,
"preview": "#include <QApplication>\n#include <QFormLayout>\n#include <QVBoxLayout>\n\n#include <ctkCheckablePushButton.h>\n#include <ct"
}
]
About this extraction
This page contains the full source code of the myhhub/CTK-project GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 171 files (348.8 KB), approximately 100.8k tokens, and a symbol index with 31 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.