2013-05-10 33 views
5

Số lượng hướng dẫn, cách tạo plugin thiết kế qt rất mỏng ... và những thứ tôi thấy luôn sử dụng công cụ tạo qt (như thế này: http://qt-project.org/doc/qt-4.8/designer-customwidgetplugin.html). Nơi mà tôi có thêm một số định nghĩa qt trong file .prolàm cách nào để tạo plugin tùy chỉnh (widget) cho nhà thiết kế qt với cmake (và visual studio)

CONFIG  += designer plugin 

tôi sử dụng CMake và Visual Studio cho mã hóa, vì vậy nó sẽ thực sự tuyệt vời nếu ai đó có thể cho tôi biết làm thế nào tôi tạo thành công một .dll mà tôi có thể đặt trong thư mục plugins/designer để tiện ích tùy chỉnh hiển thị trong Qt Designer

Trả lời

4

Tuyên bố miễn trừ trách nhiệm: Tôi biết đây là câu hỏi cũ nhưng ngay cả bây giờ tôi không tìm được tài nguyên hoàn chỉnh về cách thực hiện.

Tôi không thể trả lời bạn cho phần Visual Studio kể từ khi tôi xây dựng trên dòng lệnh (cửa sổ), nhưng đây là cmake của tôi.

tôi giả sử bạn đã tạo các tập tin sau đây có liên quan đến plugin, ví dụ:

  • widget.h
  • widget.cpp
  • widget.ui
  • widgetPlugin.h ->QDesignerCustomWidgetInterface lớp
  • tiện íchPlugin.cpp

A thứ mà bạn muốn tạo ra một thư viện với nhiều plugins, tức là tạo ra các tập tin liên quan:

  • plugins.h ->QDesignerCustomWidgetCollectionInterface lớp
  • plugins.cpp

Nội dung của các tập tin chỉ cần làm theo những gì trong các hướng dẫn.

Các CMakeLists.txt là:

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 
) 

Để tải lại plugin trong QtDesigner, vào Help> About Plugins> Nạp lại.

Sau đó trong CMakeLists.txt khác, tôi không muốn bao gồm thư viện vì cũng có các tệp plugin * vô ích. Vì vậy, tôi đã bao gồm lại các tệp tôi muốn:

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} 
) 

Hy vọng bạn sẽ thấy nó hữu ích!

0

Chỉ cần sử dụng công cụ tự động qt của cmake và thêm tất cả các nguồn (cpp .ui .qrc vv) với mục tiêu như sau:

set(CMAKE_AUTOMOC ON) 
set(CMAKE_AUTOUIC ON) 
set(CMAKE_AUTORCC ON) 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 

find_package(Qt4 REQUIRED QtCore QtGui QtDesigner #... 
) 
include(${QT_USE_FILE}) 
add_definitions(${QT_DEFINITIONS}) 

add_library(someplugin SHARED 
    path/to/plugin/someplugin.cpp 
    path/to/plugin/someplugin.qrc 
    path/to/plugin/someplugin.ui 
    path/to/plugin/s/other/src.cpp 
    #... 
) 

target_link_libraries(someplugin ${QT_LIBRARIES}) 

install(TARGETS someplugin 
    DESTINATION ${QT_PLUGINS_DIR}/designer 
)