나는 나의 Python3/PyQt5 (5.6) 코드에서 pyqtSlot
장식 방법에 QMLListView
에서 activated
신호를 연결하고 싶습니다.PyQt5 pyqtSlot을 QML ListView 신호 "연결"에 연결하는 방법은 무엇입니까?
내 현재 접근법은 QQmlApplicationEngine
을 통해 QML 장면을로드 한 다음 findChild()
을 사용하여 ListView
에 대한 참조를 얻는 것입니다.
문제는 findChild(QObject, 'myList')
과 같은 QObject를 검색 할 때만 ListView를 찾을 수 있다는 것입니다. 그러나 htis 객체는 activated
신호에 대한 액세스를 제공하지 않습니다.이 신호는 QAbstractItemView
및 자손에 대해서만 정의 되었기 때문일 가능성이 큽니다.
따라서 findChild(QListView, 'myList')
을 시도하면 결과는 None
입니다. 따라서 나는 activated
신호를받을 수 없습니다. 이것이 PyQt5의 버그입니까, 아니면이 신호에 연결하는 다른 방법이 있습니까?
다음은 최소한의 작업 예제입니다.
list.py :
import sys
from OpenGL import GL
from PyQt5.QtCore import QUrl, QObject
from PyQt5.QtWidgets import QApplication, QListView
from PyQt5.QtQml import QQmlApplicationEngine
# Main Function
if __name__ == '__main__':
# Create main app
app = QApplication(sys.argv)
# Create QML engine
engine = QQmlApplicationEngine(app)
# Load the QML scene from file
engine.load(QUrl('List.qml'))
for root in engine.rootObjects():
node = root.findChild(QListView, 'myList')
if node:
# At this point I would like to connect something to the
# node.activated signal
print(node)
# Execute the application and exit
sys.exit(app.exec_())
List.qml :
import QtQuick 2.0
import QtQuick.Window 2.2
Window {
visibility: Window.FullScreen
visible: true
ListView {
objectName: "myList"
anchors.fill: parent
delegate: Item {
width: parent.width * 0.8
height: 40
Row {
id: row1
Rectangle {
width: 40
height: 40
color: colorCode
}
Text {
text: name
font.bold: true
anchors.verticalCenter: parent.verticalCenter
}
spacing: 10
}
}
model: ListModel {
ListElement {
name: "Grey"
colorCode: "grey"
}
ListElement {
name: "Red"
colorCode: "red"
}
ListElement {
name: "Blue"
colorCode: "blue"
}
ListElement {
name: "Green"
colorCode: "green"
}
}
}
}