Qt 5.7 Расширение всплывающего окна (ASSERT: «_currentList.object» в файле qml / qqmlobjectcreator.cpp, строка 945)

Я получил ошибку времени выполнения ниже при использовании моей пользовательской реализации всплывающего окна с Qt 5.7 (Qt 5.7 необходим, потому что есть введенный Popup, и он должен быть скомпилирован с
-developer-build флаг, чтобы экспортировались частные символы (класс QQuickPopup).

Можно попробовать заменитьCPopup» с «Popup» в MyItem.qml и вы увидите, что это работает, поэтому проблема должна быть где-то с наследованием от QQuickPopup в моем CustomPopup учебный класс.

ОШИБКА: 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

ПРОЕКТ: popuptest

popuptest.pro

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

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

custompopup.cpp

#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);
}

main.cpp

#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();
}

main.qml

import QtQuick 2.7
import QtQuick.Controls 1.5

ApplicationWindow {
visible: true
width: 600
height: 480

MyItem {
anchors.fill: parent
}
}

MyItem.qml

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"}
}
}

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]