1

我是 Qt Designer Studio 的新手。我刚刚在 Qt Design Studio 中创建了一个简单的按钮,我正在尝试将 QML 文件与 PySide2 一起使用,但我遇到了多个导入错误。有没有一种特定的方法来使用 PySide2 实现 Qt Design Studio qml 文件。

项目名称是我在 Qt Design Studio 中创建的 Demo

演示项目结构:

   Demo.qml
   Demo.qmlproject
   Demo.qmlproject.qtds
   imports
   qtquickcontrols2.conf
   Screen01.ui.qml

PySide2 项目结构(main.py 文件包含代码):

   Demo.qml
   Demo.qmlproject
   Demo.qmlproject.qtds
   imports
   qtquickcontrols2.conf
   Screen01.ui.qml
   main.py

主要.py:

from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.QtQuick import QQuickView
from PySide2.QtCore import QUrl
from imports import QtQuick
app = QApplication([])
view = QQuickView()
url = QUrl("Screen01.ui.qml")
view.engine().addImportPath("imports")
view.setSource(url)
view.show()
app.exec_()

错误:

module "QtStudio3D" is not installed 
module "Qt.SafeRenderer" is not installed 

screen01.ui.qml

import QtQuick 2.12
import Demo 1.0
import QtQuick.Controls 2.3

Rectangle {
    width: Constants.width
    height: Constants.height

    color: Constants.backgroundColor

    Button {
        id: nameButton
        x: 136
        y: 227
        text: qsTr("Button")
    }
}
4

2 回答 2

0

对于使用谷歌搜索在这里绊倒的人,我的主窗口可以正确显示:

import sys
import os

from PySide2.QtCore import Qt, QObject, Signal, Slot, Property
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine

if __name__ == "__main__":
    app = QGuiApplication(sys.argv)
     
    engine = QQmlApplicationEngine()
    engine.addImportPath("imports")
    print(engine.importPathList() )
    engine.load('qttest2.qml')
    
    if not engine.rootObjects():
        sys.exit(-1)

    sys.exit(app.exec_())

文件 qttest2.qml 来自 qt design studio,包含(必须手动编辑主窗口):

import QtQuick 2.12
import QtQuick.Layouts 1.3
import qttest2 1.0
import QtQuick.Controls 2.12

ApplicationWindow {
  visible: true
  width: 800
  height: 500
  Item {
    width: Constants.width
    height: Constants.height

    Screen01 {
    }
  }
}
于 2021-04-21T09:22:56.307 回答
-1

使用PyQt和 Qt Designer 创建 UI

于 2020-05-22T09:36:22.223 回答