【发布时间】:2015-08-18 03:57:12
【问题描述】:
我想避免使用qmake 和.pro 文件。问题是我无法让cmake 与Qt Plugins 很好地合作。我已经包含下面的代码,显示了对给定的.pro 文件正常工作的接口、插件、加载程序,但我不知道如何将此功能转移到cmake。
插件接口
加载程序知道的纯虚拟接口。
#include <QtCore/qglobal.h>
class HelloPluginInterface
{
public:
virtual void DoSomething() const = 0;
};
Q_DECLARE_INTERFACE( HelloPluginInterface, "com.harbrick.Qt.HelloPluginInterface")
插件
成为.so 的插件将被加载程序加载。
#include <QtPlugin>
#include "helloplugin_global.h"
class HelloPlugin : public QObject, public HelloPluginInterface
{
Q_OBJECT
Q_PLUGIN_METADATA( IID "com.harbrick.Qt.HelloPluginInterface" )
Q_INTERFACES( HelloPluginInterface )
public:
void DoSomething() const;
};
插件加载器
void MainWindow::LoadPlugin( const QString& pathToLibrary )
{
QPluginLoader loader( pathToLibrary );
QObject* instance = loader.instance();
if( instance )
{
HelloPluginInterface *plugin = qobject_cast< HelloPluginInterface* >( instance );
if(plugin)
{
//do stuff
...
}
else
{
qDebug() << "Not a plugin: " << Filename << " = " << loader.errorString();
}
}
}
CMakeLists.txt
无法上班
project( HelloPlugin )
cmake_minimum_required( VERSION 2.8.11 )
set( CMAKE_INCLUDE_CURRENT_DIR ON )
find_package(Qt5Widgets)
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
)
set( INCLUDE
cmakeplugin.h
cmakeplugininterface.h
)
set( SOURCES
cmakeplugin.cpp
)
add_executable(${PROJECT_NAME} ${INCLUDE} ${SOURCES} ${SRC_LIST})
add_library( cmakePlugin SHARED cmakeplugin.cpp )
QMake .pro
作品
QT += widgets
TARGET = HelloPlugin
TEMPLATE = lib
SOURCES += helloplugin.cpp
HEADERS += helloplugin.h \
helloplugin_global.h
CONFIG += plugin debug
INSTALLS += target
【问题讨论】:
-
“无法开始工作”您会遇到哪些错误?
-
“不是库”加载。我已经想通了,将发布解决方案。
-
@DaveyLaser 似乎是一个非常复杂的解决方案,因为您需要花费数年时间才能发布它。 ;)
-
哇@Nobody,哈哈!感谢您指出这一点,我会在未来几年的某个时候发布解决方案。