PySide6 和 PySide2 的 QVirtualKeyboard 默认样式不一样

QVirtualKeyboard default style for PySide6 and PySide2 not the same

我在pyside2上写的项目中使用键盘,没有任何额外的设置它看起来像这样:

但 pyside6 上的相同代码以另一种样式显示键盘:

如何在 pyside6 中使用 pyside2 中的样式?

一种可能的解决方案是从 Qt5 下载 qtvirtualkeyboard 样式并在 Qt6 中使用它:

  1. 将默认样式从qtvirtualkeyboard的Qt5分支复制到.py文件旁边的qml/QtQuick/VirtualKeyboard/Styles/文件夹中。

    mkdir -p  qml/QtQuick/VirtualKeyboard/Styles/
    git clone -b 5.15.2 https://code.qt.io/qt/qtvirtualkeyboard.git
    cp -rf qtvirtualkeyboard/src/virtualkeyboard/content/styles/default qml/QtQuick/VirtualKeyboard/Styles/qt5default
    

    结构应该如下:

    ├── main.py
    └── qml
        └── QtQuick
            └── VirtualKeyboard
                └── Styles
                    └── qt5default
                        ├── images
                        │   ├── backspace-868482.svg
                        │   ├── check-868482.svg
                        │   ├── enter-868482.svg
                        │   ├── globe-868482.svg
                        │   ├── handwriting-868482.svg
                        │   ├── hidekeyboard-868482.svg
                        │   ├── search-868482.svg
                        │   ├── selectionhandle-bottom.svg
                        │   ├── shift-80c342.svg
                        │   ├── shift-868482.svg
                        │   ├── shift-c5d6b6.svg
                        │   └── textmode-868482.svg
                        ├── style.qml
                        └── virtualkeyboard_default_style.qrc
    
  2. 换行:

    readonly property string resourcePrefix: "qrc:/QtQuick/VirtualKeyboard/content/styles/default/"
    

    至:

    readonly property string resourcePrefix: ""
    
  3. 在 .py 中,您必须将 qml 包含到 QML_IMPORT_PATH 并使用新样式设置 QT_VIRTUALKEYBOARD_STYLE:

    import os
    from pathlib import Path
    import sys
    
    from PySide6.QtWidgets import QApplication, QLineEdit
    
    CURRENT_DIRECTORY = Path(__file__).resolve().parent
    
    def main():
        os.environ["QML_IMPORT_PATH"] = os.fspath(CURRENT_DIRECTORY / "qml")
        os.environ["QT_IM_MODULE"] = "qtvirtualkeyboard"
        os.environ["QT_VIRTUALKEYBOARD_STYLE"] = "qt5default"
    
        app = QApplication(sys.argv)
    
        w = QLineEdit()
        w.show()
    
        sys.exit(app.exec())
    
    
    if __name__ == "__main__":
        main()