qml_puthon_user
qml_puthon_userЖел. 3, 2019, 1:36 Т.Ж.

Как в QML форму добавить 3D объект.

Всем доброго времени суток!
Я пишу интерфейс для пользователя и в него мне нужно добавить вращающийся 3д объект.
Как я понял, на python ещё нет QtQuick3D, поэтому пользовался Qt3D.
Для примера написал код из видео.
Qt3D QML Tutorial 1. Шаблон проекта / Project template

Написал код:

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.3
import Qt3D.Core 2.0
import Qt3D.Input 2.0
import Qt3D.Render 2.0
import Qt3D.Logic 2.0
import Qt3D.Extras 2.0

ApplicationWindow{
    id:general_win
    visible: true
    width: 1680
    height: 920
    title: qsTr("Test title")

    Rectangle 
    {
        id: mainwindow
        width: 640
        height: 480
        color: "green"

        Entity 
        {
            id: rootEntity

            Camera 
            {
                id: mainCamera
                projectionType: CameraLens.PerspectiveProjection
                fieldOfView: 60.0
                aspectRatio: 16.0 / 9.0
                nearPlane: 0.1
                farPlane: 1000.0
                position: Qt.vector3d(0.0, 0.0, 40.0)
                upVector: Qt.vector3d(0.0, 1.0, 0.0)
                viewCenter: Qt.vector3d(0.0, 0.0, 0.0)
            }

            TorusMesh 
            {
                id: torusMesh
                radius: 15.0
                minorRadius: 6.0
                slices: 16
                rings: 32
            }

            PhongMaterial
            {
                id: torusMaterial
            }

            Transform
            {
                id: torusTransform
                translation: Qt.vector3d(0.0, 0.0, 0.0)
            }

            components: 
            [
                RenderSettings
                {
                    activeFrameGraph: ForwardRenderer
                    {
                        clearColor: Qt.rgba(1, 1, 1, 1)
                        camera: mainCamera
                    }
                },
                InputSettings {}
            ]

            Entity
            {
                id: torusEntity
                components: [torusMesh, torusMaterial, torusTransform]
            }
        }
    }
}

Скрипт python который вызывает форму:

from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot

if __name__ == "__main__":
    import sys

    # создаём экземпляр приложения
    app = QGuiApplication(sys.argv)
    # создаём QML движок
    engine = QQmlApplicationEngine()

    # загружаем файл qml в движок
    engine.load("Interface_vr_eyes.qml")

    engine.quit.connect(app.quit)
    sys.exit(app.exec_())

В конечном итоге, окно приложения отображается, зелёный прямоугольник отображается в нём, а вот 3д объект, который создаётся из видео-урока не появляется на экране. Подскажите, в чём может быть проблема?
P.S. а точно ли нет QtQuick3D для питона? Если есть, подскажите.
P.S.S ещё хотел бы знать, как загрузить свою модель сделанную в КОМПАС-3D/Blender3D. На этот вопрос ответ увидел, да, загружать модель из Blender3d в расширении obj можно.

Увидел в видео, что код вызова qml файла тоже немного переписан... Там создаётся уже как бы сцена для 3д объекта, а мне нужно вставить 3д обект в главную форму получается...
Что-то типа...

import QtQuick 2.12
import ... (т.д.)

//главное окно программы
ApplicationWindow
{
    id:general_win
    visible: true
    width: 1680
    height: 920
    title: qsTr("Test title")

    //label
    //button
    //image
    //и т.д.

    //блок с вращающейся 3д моделью
    Rectangle
    {
        id: mainwindow
        width: 640
        height: 480
        color: "green"

        //описание видимости 3д модели
    }

}

Спасибо!

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

11
Evgenii Legotckoi
  • Жел. 3, 2019, 5:50 Т.Ж.

Так там не используется QML, но могу предположить, что у вас не установлен PyQt5.Qt3DCore и остальные соответствующие библиотеки

    qml_puthon_user
    • Жел. 3, 2019, 6:04 Т.Ж.

    Установлено

    Устанавливал через pip3 install pyqt3d

      qml_puthon_user
      • Жел. 3, 2019, 6:06 Т.Ж.
      • (өңделген)

      Да, в примере не используется QML, подумал, что от туда хоть как-то можно оттолкнуться.
      Если из видео, в первом сообщении, пример рабочий для python. То проблема стоит в том, что я не могу вызвать qml файл из python.

        qml_puthon_user
        • Жел. 3, 2019, 8:01 Т.Ж.
        • (өңделген)

        У меня даже нет предложения о "setSource", как в видео...

        setSource наблюдаю пока что только в QSceneLoader()

          qml_puthon_user
          • Жел. 3, 2019, 8:54 Т.Ж.

          Реализация безнадёжна? :)

            Evgenii Legotckoi
            • Жел. 3, 2019, 8:57 Т.Ж.
            • (өңделген)

            У нас с вами разница во времени скорее всего достаточно большая, поскольку я в Праге проживаю. Так что не кипишуйте. Мне сегодня ещё долго работать. Да и тут узнал, что вечером корпоратив, даты которого я перепутал. Так что наберитесь терпения )))

              qml_puthon_user
              • Жел. 3, 2019, 9:06 Т.Ж.

              Пардон.) Буду ждать и экспериментировать.)

                qml_puthon_user
                • Жел. 3, 2019, 12:18 Т.Қ.

                Полазил я по файлам Qt Design Studio, нашёл там библиотеку QtQuick3D и остальные. Сверил с файлами, которые есть у самого питона в site-packages и увидел, что да, у питона нет папки QtQuick3D. Как я понял, для вызова этой библиотеки нужен файл питона с расширением .pyd, который может называться QtQuick3D.pyd(почему так? решил из того, что есть файл QtQuick.pyd :)).

                Я не смог осилить написать зависимости, чтобы на питоне запустить QtQuick3D. Если хотите, можете попробовать. :) А так, остаётся ждать от разработчика Riverbank.
                Riverbank | Software | PyQt | What is PyQt?

                  Evgenii Legotckoi
                  • Жел. 4, 2019, 3:38 Т.Қ.
                  • Жауап шешім ретінде белгіленді.

                  Я посмотрел то видео, и сравнил с вашим кодом. У вас не запускается 3D потому, что вы не используете Qt3DQuickWindow, а используете обычный QML engine. В этом проблема, чтобы вообще 3D заработало. Но вашем случае это не получится запустить потому, что Qt3DQuickWindow отсутствует в PyQt5. Так что нужно изучать C++ ;-)

                    qml_puthon_user
                    • Жел. 4, 2019, 10:07 Т.Қ.

                    Спасибо за помощь! :) Я попытаю надежды в ожидании QtQuick3D от Riverbank'a. :)

                      Пікірлер

                      Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                      Кіріңіз немесе Тіркеліңіз
                      Г

                      C++ - Тест 001. Первая программа и типы данных

                      • Нәтиже:66ұпай,
                      • Бағалау ұпайлары-1
                      t

                      C++ - Тест 001. Первая программа и типы данных

                      • Нәтиже:33ұпай,
                      • Бағалау ұпайлары-10
                      t

                      Qt - Тест 001. Сигналы и слоты

                      • Нәтиже:52ұпай,
                      • Бағалау ұпайлары-4
                      Соңғы пікірлер
                      G
                      GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
                      Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
                      d
                      dblas5Шілде 5, 2024, 11:02 Т.Ж.
                      QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                      k
                      kmssrАқп. 8, 2024, 6:43 Т.Қ.
                      Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                      АК
                      Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
                      Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                      Енді форумда талқылаңыз
                      Evgenii Legotckoi
                      Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                      добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                      F
                      FynjyШілде 22, 2024, 4:15 Т.Ж.
                      при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
                      BlinCT
                      BlinCTМаусым 25, 2024, 1 Т.Ж.
                      Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
                      BlinCT
                      BlinCTМамыр 5, 2024, 5:46 Т.Ж.
                      Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
                      Evgenii Legotckoi
                      Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
                      Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

                      Бізді әлеуметтік желілерде бақылаңыз