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
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
Г
- Геній
- Қыр. 13, 2024, 12:46 Т.Қ.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:66ұпай,
- Бағалау ұпайлары-1
t
- torgaev_2024
- Қыр. 8, 2024, 6:20 Т.Ж.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:33ұпай,
- Бағалау ұпайлары-10
Соңғы пікірлер
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
ВР
Linux жүйесінде файлдарды қалай көшіруге болады Screenshot_20240802-065123.png
Влад РусоковТам. 2, 2024, 1:47 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Енді форумда талқылаңыз
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCTМаусым 25, 2024, 1 Т.Ж.
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
c таким оформлением даже не хочу начинать смотреть код
на нет и суда нет.