Model не определяется в QQuickWidget
проектный файл
- QT += core gui quickwidgets widgets
- CONFIG += c++11
- # You can make your code fail to compile if it uses deprecated APIs.
- # In order to do so, uncomment the following line.
- #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
- HEADERS += \
- widget.h
- SOURCES += \
- main.cpp \
- widget.cpp
- RESOURCES += qml.qrc
- # Additional import path used to resolve QML modules in Qt Creator's code model
- QML_IMPORT_PATH =
- # Additional import path used to resolve QML modules just for Qt Quick Designer
- QML_DESIGNER_IMPORT_PATH =
- # Default rules for deployment.
- qnx: target.path = /tmp/$${TARGET}/bin
- else: unix:!android: target.path = /opt/$${TARGET}/bin
- !isEmpty(target.path): INSTALLS += target
хедер виджета
- #ifndef WIDGET_H
- #define WIDGET_H
- #include <QObject>
- #include <QWidget>
- #include <QGridLayout>
- #include <QStringListModel>
- #include <QQuickWidget>
- #include <QQmlContext>
- #include <QQuickItem>
- class Widget : public QWidget
- {
- Q_OBJECT
- public:
- explicit Widget(QWidget *parent = 0);
- ~Widget();
- private:
- QGridLayout *gridLayout;
- QQuickWidget *quickWidget;
- };
- #endif // WIDGET_H
реализация виджета
- #include "widget.h"
- Widget::Widget(QWidget *parent) :
- QWidget(parent)
- , gridLayout(new QGridLayout(this))
- , quickWidget (new QQuickWidget(this))
- {
- quickWidget->setSource(QUrl("qrc:/main.qml"));
- quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
- gridLayout->addWidget(quickWidget, 1, 0);
- // Добавление модели в qml
- QQmlContext *rootQMLcontext = quickWidget->rootContext();
- QQuickItem *rootObj = quickWidget->rootObject();
- QObject *objListView = rootObj->findChild<QObject *>("ListView");
- if (objListView)
- {
- QStringList lst;
- for (int i = 0; i < 100; ++i)
- {
- lst << "Item" + QString::number(i);
- }
- QStringListModel *pmodel = new QStringListModel(quickWidget);
- pmodel->setStringList(lst);
- rootQMLcontext->setContextProperty("myModel", pmodel);
- }
- this->setLayout(gridLayout);
- }
- Widget::~Widget()
- {
- }
main.qml
- import QtQuick 2.5
- import QtQuick.Controls 2.1
- import QtQuick.Layouts 1.12
- Item {
- anchors.fill: parent
- GridLayout
- {
- id: grid
- x: 20
- y: 20
- columnSpacing: 10
- rows: 10
- columns: 1
- Button{
- id: button
- text: "hello!"
- Layout.row: 0
- Layout.column: 0
- }
- ListView {
- objectName: "ListView"
- model: myModel
- delegate: Text {text: model.display}
- Layout.row: 1
- Layout.column: 0
- Layout.rowSpan: 8
- }
- }
- }
main.cpp
- #include <QApplication>
- #include <QMainWindow>
- #include "widget.h"
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- QMainWindow m;
- auto qmlMainWidget = new Widget(&m);
- m.setCentralWidget(qmlMainWidget);
- m.show();
- return app.exec();
- }
ошибка
- QML debugging is enabled. Only use this in a safe environment.
- qrc:/main.qml:14: ReferenceError: myModel is not defined
Почему есть ошибка?
ListView поверх кнопки, не смотря на GridLayout
2
99
The question is asked by the articleQML - Lesson 024. Custom QQuickItem – How to add QML object from C++Do you like it? Share on social networks!
- Last comments
- AKApril 1, 2025, 11:41 a.m.Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Now discuss on the forum
- МАApril 1, 2025, 4:21 p.m.0ff763fe-4e50-455d-a3a6-5699c243b1a5_17_44_22_1.xml
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
c таким оформлением даже не хочу начинать смотреть код
на нет и суда нет.