Added PySide6 support

Task-Id: KDDW-27
This commit is contained in:
Renato Araujo Oliveira Filho
2021-01-11 16:31:49 -03:00
parent d80325ec8f
commit 4e79c68a7d
13 changed files with 499 additions and 25 deletions

View File

@@ -11,8 +11,17 @@
set(PYTHON_VERSION "3.7" CACHE STRING "Use specific python version to build the project.")
find_package(Python3 ${PYTHON_VERSION} REQUIRED COMPONENTS Interpreter Development)
find_package(Shiboken2 REQUIRED)
find_package(PySide2 ${Qt5Widgets_VERSION} EXACT REQUIRED)
include(PySide2ModuleBuild)
if (${PROJECT_NAME}_QT6)
find_package(Shiboken6 REQUIRED)
find_package(PySide6 ${Qt5Widgets_VERSION} EXACT REQUIRED)
include(PySide6ModuleBuild)
set(PYSIDE_MAJOR_VERSION "6")
else()
find_package(Shiboken2 REQUIRED)
find_package(PySide2 ${Qt5Widgets_VERSION} EXACT REQUIRED)
include(PySide2ModuleBuild)
set(PYSIDE_MAJOR_VERSION "2")
endif()
add_subdirectory(PyKDDockWidgets)

View File

@@ -20,9 +20,6 @@ set(PyKDDockWidgets_SRC
${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets/kddockwidgets_mainwindowbase_wrapper.h
${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets/kddockwidgets_mainwindow_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets/kddockwidgets_mainwindow_wrapper.h
# namespace wrapper
${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets/kddockwidgets_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets/kddockwidgets_wrapper.h
# global module wrapper
${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets/kddockwidgets_module_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/KDDockWidgets/kddockwidgets_python.h
@@ -47,9 +44,9 @@ set(PyKDDockWidgets_target_include_directories
# Libraries that will be necessary to link the target, this will used in the command 'target_link_libraries'
set(PyKDDockWidgets_target_link_libraries
KDAB::kddockwidgets
Qt5::Core
Qt5::Gui
Qt5::Widgets
Qt${QT_MAJOR_VERSION}::Core
Qt${QT_MAJOR_VERSION}::Gui
Qt${QT_MAJOR_VERSION}::Widgets
)
# changes on these files should trigger a new generation
@@ -75,7 +72,7 @@ create_python_bindings(
)
# Make module import from build dir work
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${CMAKE_CURRENT_BINARY_DIR}/__init__.py)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.cmake ${CMAKE_CURRENT_BINARY_DIR}/__init__.py @ONLY)
# install
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py DESTINATION ${${PROJECT_NAME}_PYTHON_BINDINGS_INSTALL_PREFIX}/PyKDDockWidgets)

View File

@@ -9,17 +9,16 @@
# Contact KDAB at <info@kdab.com> for commercial licensing options.
#
import sys
__all__ = ['KDDockWidgets']
# Preload PySide2 libraries to avoid missing libraries while loading KDDockWidgets
try:
from PySide2 import QtCore
from PySide@PYSIDE_MAJOR_VERSION@ import QtCore
# Create a alias for PySide module so we can use a single import in source files
import PySide@PYSIDE_MAJOR_VERSION@
sys.modules["PySide"] = PySide@PYSIDE_MAJOR_VERSION@
except Exception:
print("Failed to load PySide")
raise
# avoid duplicate namespace, due the PYSIDE-1325 bug I will have my package like this
# PyKDDockWidgets.KDDockWidgets.KDDockWidgets.MainWindow
# To avoid this I add a WORKAROUND to reduce it
from .KDDockWidgets import KDDockWidgets as _priv
KDDockWidgets = _priv

View File

@@ -6,8 +6,12 @@
typesystem because it already include gui and core typesystem -->
<load-typesystem name="typesystem_widgets.xml" generate="no"/>
<rejection class="KDDockWidgets" function-name="qt_getEnumName"/>
<rejection class="KDDockWidgets" function-name="qt_getEnumMetaObject"/>
<!-- Our classes are declared in a namespace, so we should define this -->
<namespace-type name="KDDockWidgets">
<namespace-type name="KDDockWidgets" visible="no">
<!-- this is used in a public virtual pure function we need to declare it
otherwise shiboken will ignore the function and will fail to create a wrapper -->
<primitive-type name="DropAreaWithCentralFrame"/>

View File

@@ -9,9 +9,10 @@
# Contact KDAB at <info@kdab.com> for commercial licensing options.
#
from PySide2 import QtCore, QtWidgets, QtGui
from PyKDDockWidgets import KDDockWidgets
from PySide import QtCore, QtWidgets, QtGui
from MyWidget1 import MyWidget1
from MyWidget2 import MyWidget2
from MyWidget3 import MyWidget3

View File

@@ -9,7 +9,9 @@
# Contact KDAB at <info@kdab.com> for commercial licensing options.
#
from PySide2 import QtWidgets, QtGui, QtCore
import PyKDDockWidgets
from PySide import QtWidgets, QtGui, QtCore
class MyWidget(QtWidgets.QWidget):
s_images = {}

View File

@@ -9,7 +9,9 @@
# Contact KDAB at <info@kdab.com> for commercial licensing options.
#
from PySide2 import QtWidgets, QtGui
import PyKDDockWidgets
from PySide import QtWidgets, QtGui
from MyWidget import MyWidget

View File

@@ -9,8 +9,10 @@
# Contact KDAB at <info@kdab.com> for commercial licensing options.
#
from PySide2 import QtWidgets, QtGui, QtCore
import PyKDDockWidgets
from PySide import QtWidgets, QtGui, QtCore
from MyWidget import MyWidget
class MyWidget2(MyWidget):

View File

@@ -9,7 +9,9 @@
# Contact KDAB at <info@kdab.com> for commercial licensing options.
#
from PySide2 import QtWidgets, QtGui, QtCore
import PyKDDockWidgets
from PySide import QtWidgets, QtGui, QtCore
from MyWidget import MyWidget

View File

@@ -9,11 +9,11 @@
# Contact KDAB at <info@kdab.com> for commercial licensing options.
#
from PySide2 import QtWidgets, QtCore
from PyKDDockWidgets import KDDockWidgets
from MyMainWindow import MyMainWindow
from PySide import QtWidgets, QtCore
import sys
import rc_assets