qml не работает с vispy

В процессе изучения Qt и Qt Quick столкнулся с очень интересной проблемой. Я хотел добавить в свое приложение виджет, на котором что-то будет отображаться с помощью OpenGl. Я нашел небольшой пример с использованием vispy и решил попробовать. И тут происходит что-то очень интересное. Дело в том, что один из моих виджетов написан на QML, и когда я запускаю свое приложение, виджет с OpenGL работал. Вместо QML-виджета появляется черный квадрат. Так же в логе пишется следующее:

ПРЕДУПРЕЖДЕНИЕ: QQuickWidget нельзя использовать как родной дочерний виджет. Рассмотрите возможность установки Qt::AA_DontCreateNativeWidgetSiblings

Вот мой код:

import QtQuick 2.7
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.0

Rectangle {
width: 200
height: 200
color: 'white'

Rectangle {
    id: lef_rec
    width: parent.width / 2
    height: parent.height
    color: "green"
}

Rectangle {
    width: parent.width / 2
    height: parent.height
    anchors.left: lef_rec.right
    color: "blue"
}
}

В Питоне:

self.qml_wdg = QQuickWidget()
self.qml_wdg.setSource(QtCore.QUrl("main.qml"))     
canvas = Canvas(keys='interactive', vsync=False).native
layout = QtWidgets.QVBoxLayout()
layout.addWidget(canvas)
layout.addWidget(self.qml_wdg)        
self.centralwidget.setLayout(layout)

По отдельности все работает, вместе вот эта ошибка. Мне интересно, что это за проблема?


person v_sith_v    schedule 30.05.2017    source источник


Ответы (1)


Вы должны поместить атрибут с setAttribute():

{your QApplication}.setAttribute(QtCore.Qt.AA_DontCreateNativeWidgetSiblings)

Полный код:

import sys

from PyQt5 import QtWidgets, QtCore, QtQuickWidgets
from vispy.app import Canvas


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent=parent)
        self.centralwidget = QtWidgets.QWidget()
        self.setCentralWidget(self.centralwidget)
        self.qml_wdg = QtQuickWidgets.QQuickWidget()
        self.qml_wdg.setSource(QtCore.QUrl("main.qml"))
        canvas = Canvas(keys='interactive', vsync=False).native
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(canvas)
        layout.addWidget(self.qml_wdg)
        self.centralwidget.setLayout(layout)


app = QtWidgets.QApplication(sys.argv)
app.setAttribute(QtCore.Qt.AA_DontCreateNativeWidgetSiblings)
w = MainWindow()
w.show()
sys.exit(app.exec_())

введите здесь описание изображения

person eyllanesc    schedule 30.05.2017
comment
Хм, это очень странно, но теперь, когда я щелкнул область QML, у меня появился этот текст: text - person v_sith_v; 30.05.2017