Ярлык в элементе меню PySide2 предотвращает отображение окна - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь создать очень простое ApplicationWindow, используя PySide2 (Qt для Windows) и QML.

main.py

import sys
from PySide2.QtWidgets import QApplication
from PySide2.QtCore import QUrl
from PySide2.QtQml import QQmlApplicationEngine

if __name__ == "__main__":
    app = QApplication(sys.argv)
    url = QUrl("mainWindow.qml")
    engine = QQmlApplicationEngine()
    engine.load(url)
    sys.exit(app.exec_())

qml файл

import QtQuick.Controls 2.4

ApplicationWindow {
    id: mainWindow
    visible: true
    title: "MainWindow"
    width: 640
    height: 480

    menuBar: MenuBar {
        id: menuBar

        Menu {
            id: editMenu
            title: "&Edit"

            MenuItem {
                id: copyItem
                text: "Copy"
                // This doesn't work:
                // shortcut: "Ctrl+C"
                // This doesn't work either:
                // shortcut: StandardKey.Copy
            }
        }
    }
}

Как показано, код запускается и отображает окно приложения с панелью меню и меню. Но если я прокомментирую любой из двух вариантов ярлыка, окно вообще не будет отображаться. Я не понимаю, почему. Мой пример следует документации Qt на MenuItems .

1 Ответ

0 голосов
/ 13 ноября 2018

В QML есть 2 типа элементов: Qt Quick Controls 1 и Qt Quick Controls 2. Обе группы имеют элементы с одинаковым именем, но они различаются по своим свойствам, в вашем случае MenuItem из Qt Quick Controls 2 не имеет свойства ярлыка, а вместо этого Qt Quick Controls 1, если оно есть, поэтому решение состоит в том, чтобы изменить импорт:

import QtQuick 2.11         // <---
import QtQuick.Controls 1.4 // <---

ApplicationWindow {
    id: mainWindow
    visible: true
    title: "MainWindow"
    width: 640
    height: 480

    menuBar: MenuBar {
        id: menuBar
        Menu {
            id: editMenu
            title: "&Edit"

            MenuItem {
                id: copyItem
                text: "Copy"
                shortcut: StandardKey.Copy
                onTriggered: console.log("copy")
            }
        }
    }
}
...