Изменение коллекции QGraphicsScene/QGraphicsItem для использования QML... Я воссоздаю элементы во внутренней части и пытаюсь поместить их в повторитель во внешнем интерфейсе QML.< /p>
Мои элементы наследуют QQuickItem (я даже пытался наследовать частные, более похожие типы объектов, возможно, это не последний вариант, но его будет проще разместить полностью созданные элементы. Используемые элементы могут быть любыми подклассами QQuickItem.)
Я могу получить информацию об их содержимом, я могу разместить один созданный элемент на холсте, но Я не знаю, как разместить всю модель на холсте QML.
Пожалуйста, взгляните на мой пример и помогите мне разместить мои элементы на сцене ( в Репитере)
main.cpp:
#include "backend.h"
#include
#include
#include
#define APP_URI "uri.dlitems"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterSingletonType(APP_URI, 1, 0, "Backend", [](QQmlEngine *, QJSEngine *) {return new Backend();}); // To show with model
qmlRegisterType(APP_URI, 1, 0, "MyTextItem"); // To show stand-alone without model
qmlRegisterType(APP_URI, 1, 0, "MyRectangleItem");
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, (QObject *obj, const QUrl &objUrl) { if ... -qml-scene
Отображение объектов C++ на сцене QML ⇐ C++
Программы на C++. Форум разработчиков
1735240405
Anonymous
Изменение коллекции QGraphicsScene/QGraphicsItem для использования QML... Я воссоздаю элементы во внутренней части и пытаюсь поместить их в повторитель во внешнем интерфейсе QML.< /p>
Мои элементы наследуют QQuickItem (я даже пытался наследовать частные, более похожие типы объектов, возможно, это не последний вариант, но его будет проще разместить полностью созданные элементы. Используемые элементы могут быть любыми подклассами QQuickItem.)
Я могу получить информацию об их содержимом, я могу разместить один созданный элемент на холсте, но [b]Я не знаю, как разместить всю модель на холсте QML[/b].
Пожалуйста, взгляните на мой пример и помогите мне разместить мои элементы на сцене ( в Репитере)
main.cpp:
#include "backend.h"
#include
#include
#include
#define APP_URI "uri.dlitems"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterSingletonType(APP_URI, 1, 0, "Backend", [](QQmlEngine *, QJSEngine *) {return new Backend();}); // To show with model
qmlRegisterType(APP_URI, 1, 0, "MyTextItem"); // To show stand-alone without model
qmlRegisterType(APP_URI, 1, 0, "MyRectangleItem");
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
main.qml:
import QtQuick 2.12
import QtQuick.Window 2.1
import uri.dlitems 1.0
ApplicationWindow {
id: proofRoot
visible: true
width: 1024
height: 545
property list myModel: Backend.model
MyTextItem {} // To show the items themselves like I want with the repeater
MyRectangleItem {}
Rectangle {
anchors {
right: parent.right
top: parent.top
margins: 20
}
height: 150
width: 500
ListView { // To show that the model is accessible and I can get item info in QML
id: listView
anchors.fill: parent
anchors.margins: 20
spacing: 10
model: proofRoot.myModel
delegate: Item {
id: myItem
required property string itemType
width: label.width
height: label.height
Text {
text: myItem.itemType
font.pointSize: 24
}
}
}
}
Rectangle {
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
margins: 20
}
height: 350
Repeater { // This is actually what I want - a way to display the items as above but using a model
anchors.fill: parent
anchors.margins: 20
model: proofRoot.myModel
delegate: Item {
// No idea what to do here
// I want to show the elements from the model with their properties from c++
}
}
}
}
backend.h:
#ifndef BACKEND_H
#define BACKEND_H
#include
#include
#include
class TextItem : public QQuickText
{
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(QString itemType MEMBER m_itemType NOTIFY itemTypeChanged)
public:
TextItem() : QQuickText(Q_NULLPTR), m_itemType("TextItem") {
setText("TextItem");
setPosition(QPointF(10, 10));
setSize(QSizeF(100, 20));
QFont f;
f.setItalic(true);
f.setPointSize(16);
setFont(f);
}
signals:
void itemTypeChanged();
private:
QString m_itemType;
};
class RectangleItem : public QQuickRectangle
{
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(QString itemType MEMBER m_itemType NOTIFY itemTypeChanged)
public:
RectangleItem() : QQuickRectangle(Q_NULLPTR), m_itemType("RectangleItem") {
setPosition(QPointF(40, 120));
setSize(QSizeF(100, 50));
setColor(Qt::red);
QQuickPen *pen = border();
pen->setWidth(2);
pen->setColor(Qt::black);
}
signals:
void itemTypeChanged();
private:
QString m_itemType;
};
class Backend : public QObject
{
Q_OBJECT
Q_PROPERTY(QList model MEMBER m_model NOTIFY modelChanged)
QML_ELEMENT
QML_SINGLETON
public:
explicit Backend(QObject *parent = nullptr) : QObject{parent} {
m_model.append(new TextItem());
m_model.append(new RectangleItem());
}
virtual ~Backend() override {
for (QObject *item : m_model) delete item;
}
signals:
void modelChanged();
private:
QList m_model;
};
#endif // BACKEND_H
Подробнее здесь: [url]https://stackoverflow.com/questions/79310248/showing-c-objects-on-a-qml-scene[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия