我如何使用cmake(和Visual Studio)为Qt Designer创建自定义(小部件)插件 [英] how do i create a custom (widget) plugin for qt designer with cmake ( and visual studio )
问题描述
教程的数量,如何创建qt设计器插件都很薄..而我发现的教程总是使用qt creator(例如:
The amount of tutorials, how to create a qt designer plugin is very thin..and the ones i found always use qt creator ( like this one : http://qt-project.org/doc/qt-4.8/designer-customwidgetplugin.html ). Where i have to add some qt definitions in the .pro file
CONFIG += designer plugin
我使用CMake和Visual Studio进行编码,因此如果有人告诉我如何成功创建一个.dll并将其放置在plugins/designer文件夹中以在Qt Designer中显示自定义小部件,那真是太棒了
I use CMake and Visual Studio for coding, so it would be really awesome if someone could tell me how i successfully create a .dll that i can put in the plugins/designer folder to have the custom widget show up in Qt Designer
推荐答案
免责声明:我知道这是一个古老的问题,但是即使到现在我也没有找到有关如何执行操作的完整资源.
Disclaimer: I know this is an old question but Even now I didn't find complete resources on how to do it.
由于我是基于(windows)命令行构建的,所以我无法回答Visual Studio的部分,但这是我的cmake.
I can't answer you for the Visual Studio part since I build on the (windows) command line, but here is my cmake.
我假设您已经创建了与该插件相关的以下文件,即:
I assume you have already created the following files related to the plugin, i.e.:
- widget.h
- widget.cpp
- widget.ui
- widgetPlugin.h->
QDesignerCustomWidgetInterface
类 - widgetPlugin.cpp
您要创建具有多个插件的库,即创建相关文件:
And that you want to create a library with multiple plugins, i.e. created the related files:
- plugins.h->
QDesignerCustomWidgetCollectionInterface
类 - plugins.cpp
文件的内容仅遵循教程中的内容.
The content of the files simply follow what's in the tutorials.
CMakeLists.txt是:
The CMakeLists.txt is:
cmake_minimum_required(VERSION 2.8)
set(PROJECT Plugins)
project(${PROJECT})
# Needed to compile against ui and moc generated files
include_directories(${CMAKE_CURRENT_BINARY_DIR})
set(SOURCES
plugins.cpp
widgetPlugin.cpp
widget.cpp
)
set(HEADERS
plugins.h
widgetPlugin.h
widget.h
)
set(FORMS
widget.ui
)
# This is experimental, it works but it may be not optimal, don't hesitate to change this
find_package(Qt4 REQUIRED QtCore QtGui QtDesigner)
if (QT4_FOUND AND QT_QTCORE_FOUND AND QT_QTGUI_FOUND AND QT_QTDESIGNER_FOUND)
set(QT_USE_QTDESIGNER TRUE)
include(${QT_USE_FILE})
else()
message(FATAL_ERROR "no qt...")
endif()
qt4_wrap_cpp(HEADERS_MOC ${HEADERS})
qt4_wrap_ui(FORMS_HEADERS ${FORMS})
qt4_add_resources(RESOURCES_RCC ${RESOURCES})
# Here too, I'm not sure every define is necessary
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_definitions(-DQT_PLUGIN)
add_definitions(-DQT_NO_DEBUG)
add_definitions(-DQT_SHARED)
add_definitions(-DQDESIGNER_EXPORT_WIDGETS)
add_library(${PROJECT} SHARED
${SOURCES}
${HEADERS_MOC}
${FORMS_HEADERS}
${RESOURCES_RCC}
)
target_link_libraries(${PROJECT} ${QT_LIBRARIES})
# Install the library in QtDesigner plugin directory
install(TARGETS ${PROJECT}
DESTINATION ${QT_PLUGINS_DIR}/designer
)
要在QtDesigner中重新加载插件,请转到帮助">关于插件">重新加载".
To reload the plugins in QtDesigner, go to Help > About Plugins > Reload.
然后在另一个CMakeLists.txt中,我不想包含该库,因为那里也有无用的* Plugin文件.所以我再次包含了我想要的文件:
Then in the other CMakeLists.txt, I didn't want to include the library since there are also useless *Plugin files. So I included again the files I wanted :
cmake_minimum_required(VERSION 2.8)
set(PROJECT GPAUSX)
project(${PROJECT})
# Include the other CMakeLists.txt
subdirs(Plugins)
find_package(Qt4 REQUIRED)
# Files to insert
set(SOURCES
main.cpp
MainWindow.cpp
${Plugins_SOURCE_DIR}/widget.cpp
)
set(HEADERS
MainWindow.h
${Plugins_SOURCE_DIR}/widget.h
)
set(FORMS
MainWindow.ui
${Plugins_SOURCE_DIR}/widget.ui
)
qt4_wrap_cpp(HEADERS_MOC ${HEADERS})
qt4_wrap_ui(FORMS_HEADERS ${FORMS})
qt4_add_resources(RESOURCES_RCC ${RESOURCES})
include(${QT_USE_FILE})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_definitions(${QT_DEFINITIONS})
# I'm no expert in libraries so, intuitively I'd say this is useless but it won't compile if I don't define it.
# This clearly needs to get fixed.
add_definitions(-DQDESIGNER_EXPORT_WIDGETS)
# Possible variants making it compile :
# 1/ either include Plugins_BINARY_DIR or include .uis
# including the binary dir makes use of the already generated .uis
# 2/ either target Plugins or add Plugins .uis, .hs and .cpps with -DQDESIGNER_EXPORT_WIDGETS
# if you target plugins, make sure you compile with the same flags
add_executable(${PROJECT}
${SOURCES}
${HEADERS_MOC}
${FORMS_HEADERS}
${RESOURCES_RCC}
)
target_link_libraries(${PROJECT}
# Uncomment the following if you want to target Plugins
#Plugins
${QT_LIBRARIES}
)
希望您会发现它有用!
这篇关于我如何使用cmake(和Visual Studio)为Qt Designer创建自定义(小部件)插件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!