Details
-
Bug
-
Resolution: Done
-
P2: Important
-
5.7.0
-
None
-
0e3636a4692c9cf89d994f3fe5c1c110b4c6ee61
Description
I got the runtime error below when using my custom popup implementation with Qt 5.7 (Qt 5.7 is necessary because there is introduced Popup and it needs to be compiled with
-developer-build flag so private symbols (QQuickPopup class) are exported).
You can try replace "CPopup" with "Popup" in MyItem.qml and you will see it works, so the problem needs to be somewhere with the inheritance from QQuickPopup in my CustomPopup class.
ERROR: ASSERT: "_currentList.object" in file qml/qqmlobjectcreator.cpp, line 945
https://github.com/qt/qtquickcontrols2/blob/5.7/src/quicktemplates2/qquickpopup_p.h
https://github.com/qt/qtquickcontrols2/blob/5.7/src/quicktemplates2/qquickpopup.cpp
https://github.com/qt/qtdeclarative/blob/dev/src/qml/qml/qqmlobjectcreator_p.h
https://github.com/qt/qtdeclarative/blob/dev/src/qml/qml/qqmlobjectcreator.cpp
PROJECT: popuptest
TEMPLATE = app QT += gui qml quick quickcontrols2 QT_PRIVATE += quick-private core-private gui-private qml-private quickcontrols2-private quicktemplates2-private CONFIG += c++11 SOURCES += main.cpp \ custompopup.cpp RESOURCES += qml.qrc # Additional import path used to resolve QML modules in Qt Creator's code model QML_IMPORT_PATH = # Default rules for deployment. include(deployment.pri) HEADERS += \ custompopup.h
#ifndef CUSTOMPOPUP_H #define CUSTOMPOPUP_H #include <private/qquickpopup_p.h> class CustomPopup : public QQuickPopup { Q_OBJECT //Q_PROPERTY(QQmlListProperty<QObject> contentData READ contentData FINAL) //Q_CLASSINFO("DefaultProperty", "contentData") public: CustomPopup(QObject *parent = nullptr); protected: bool overlayEvent(QQuickItem *item, QEvent *event) override; private: /*Q_DISABLE_COPY(CustomPopup) Q_DECLARE_PRIVATE(QQuickPopup)*/ }; QML_DECLARE_TYPE(CustomPopup) #endif // CUSTOMPOPUP_H
#include "custompopup.h" CustomPopup::CustomPopup(QObject *parent) : QQuickPopup(parent) { } bool CustomPopup::overlayEvent(QQuickItem *item, QEvent *event) { /*QQuickPopup implementation Q_D(QQuickPopup); switch (event->type()) { case QEvent::KeyPress: case QEvent::KeyRelease: case QEvent::MouseMove: case QEvent::Wheel: if (d->modal) event->accept(); return d->modal; case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: if (d->modal) event->accept(); d->tryClose(item, static_cast<QMouseEvent *>(event)); return d->modal; default: return false; } */ // Q_D(QQuickPopup); return QQuickPopup::overlayEvent(item, event); }
#include <QGuiApplication> #include <QQmlApplicationEngine> #include "custompopup.h" int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; qmlRegisterType<CustomPopup>("Custom", 1, 0, "CPopup"); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); }
import QtQuick 2.7 import QtQuick.Controls 1.5 ApplicationWindow { visible: true width: 600 height: 480 MyItem { anchors.fill: parent } }
import QtQuick 2.0 import QtQuick.Controls 2.0 import Custom 1.0 Item { MouseArea { anchors.fill: parent acceptedButtons: Qt.RightButton onClicked: { menu.x = mouse.x menu.y = mouse.y menu.open() } } CPopup { id: menu Rectangle { width: 100 height: 100 color: "red" } } }
Attachments
Issue Links
- relates to
-
QTBUG-56038 Create contentItem lazily where possible
- Closed