-
Bug
-
Resolution: Done
-
P2: Important
-
5.7.0
-
None
-
0e3636a4692c9cf89d994f3fe5c1c110b4c6ee61
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"
}
}
}
- relates to
-
QTBUG-56038 Create contentItem lazily where possible
-
- Closed
-