QtGui.QIdentityProxyModel отсутствует в PySide?
Я хочу написать собственную прокси-модель, чтобы "сплющить" древовидную модель (т. Е. Некоторые элементы могут иметь дочерние элементы) в виде списка (т. Е. Ни один элемент не имеет дочерних элементов) путем сопоставления индексов. Наследование QtGui.QIdentityProxyModel
кажется, лучший способ: http://qt-project.org/doc/qt-4.8/qidentityproxymodel.html но я не могу найти его в PySide 1.2.1, которая построена с Qt 4.8 (которая включает в себя QIdentityProxyModel
): http://seanfisk.github.io/pyside-docs/pyside/PySide/QtGui/index.html.
Так что это, кажется, оставляет мне два варианта:
подкласс
QAbstractProxyModel
или жеQSortFilterProxyModel
найти способ собрать PySide сам, чтобы включить
QIdentityProxyModel
Любые предложения будут оценены.
1 ответ
Я бы пошел на 2), потому что это было бы полезно для потомков, если у вас есть достаточно времени, чтобы пройти через него.
Сначала вам нужно собрать и установить shiboken, так как это зависимость для сборки pyside. Вы можете сделать это следующим образом:
* git clone git@gitorious.org:pyside/shiboken.git
* cd shiboken
* mkdir build
* cd build
* cmake -DCMAKE_INSTALL_PREFIX="/usr/local" ..
* n(make)
* n(make) install
Как только это будет сделано, вы начнете работать над pyside следующим образом:
* git clone git@gitorious.org:pyside/pyside.git
* edit the PySide/QtGui/typesystem_gui_common.xml file:
Это мое git diff
выход:
diff --git a/PySide/QtGui/CMakeLists.txt b/PySide/QtGui/CMakeLists.txt
index 7625634..172f321 100644
--- a/PySide/QtGui/CMakeLists.txt
+++ b/PySide/QtGui/CMakeLists.txt
@@ -275,6 +275,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qshowevent_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qsizepolicy_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qslider_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qsortfilterproxymodel_wrapper.cpp
+${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qidentityproxymodel_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qsound_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qspaceritem_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qspinbox_wrapper.cpp
diff --git a/PySide/QtGui/typesystem_gui_common.xml b/PySide/QtGui/typesystem_gui_common.xml
index 711d7cc..4980fa4 100644
--- a/PySide/QtGui/typesystem_gui_common.xml
+++ b/PySide/QtGui/typesystem_gui_common.xml
@@ -4571,6 +4571,16 @@
<modify-function signature="clear()" remove="all"/>
<modify-function signature="filterChanged()" remove="all"/>
<!--### End of obsolete section -->
+</object-type>
+ <object-type name="QIdentityProxyModel">
+ <extra-includes>
+ <include file-name="QItemSelection" location="global"/>
+ </extra-includes>
+ <modify-function signature="setSourceModel(QAbstractItemModel*)">
+ <modify-argument index="1">
+ <reference-count action="set"/>
+ </modify-argument>
+ </modify-function>
</object-type>
<object-type name="QSlider">
<enum-type name="TickPosition" />
После этого вам нужно будет настроить, собрать и установить проект следующим образом:
* mkdir build
* cd build
* cmake -DCMAKE_INSTALL_PREFIX="/usr/local" -DCMAKE_PREFIX_PATH="/usr/local" ..
* (n)make
* (n)make install
Я предоставляю эти команды для Unix, но их легко адаптировать и для других операционных систем, таких как Windows.
Я не утверждаю, что мой патч идеален, но именно здесь вы можете начать эксперимент. Это не должно быть слишком сложно.
Кроме того, не забывайте, что есть третий вариант, использующий PyQt, где этот класс, кажется, поддерживается: