У меня есть база данных, полная альбомов, и я хочу отобразить эти альбомы в GridView
.Я создал файл qml, который использует персонализированный модуль (albumObject.h
) для получения данных из базы данных.Поскольку у меня уже есть MainWindow
в main.cpp
, мне нужно отобразить GridView
в QQuickWidget
, который создан внутри файла mainwindow.cpp
.Вот код:
albumObject.h
class AlbumObject : public QObject {
Q_OBJECT
Q_PROPERTY(QString artist READ getArtist)
Q_PROPERTY(QString album READ getAlbum)
Q_PROPERTY(QString date READ getDate)
Q_PROPERTY(QString img READ getImg)
public:
AlbumObject(QObject* parent = nullptr);
const QString getArtist() const;
const QString getAlbum() const;
const QString getDate() const;
const QString getImg() const;
void setArtist(const QString& artist);
void setAlbum(const QString& album);
void setDate(const QString& date);
void setImg(const QString& img);
private:
QString m_artist;
QString m_album;
QString m_date;
QString m_img;
};
mainwindow.cpp
Я использую это соединение внутриКонструктор MainWindow для обновления пользовательского интерфейса при добавлении всех альбомов в базу данных
connect(&databaseManager, &DatabaseManager::albumAddedToDB,
&databaseManager, [&]() {
QList<QObject*> albums = databaseManager.getAlbumsFromDB();
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
QQmlContext *ctxt = view.rootContext();
ctxt->setContextProperty("albumModel", QVariant::fromValue(albums));
ui->albumGrid->setSource(QUrl{"../Hallownest/Model/something.qml"});
ui->albumGrid->createWindowContainer(&view, this);
});
нечто.qml
import QtQuick 2.4
Rectangle {
width: 800; height: 600
Component {
id: albumDelegate
Item {
width: grid.cellWidth; height: grid.cellHeight
Column {
anchors.fill: parent
Text { text: artist; anchors.horizontalCenter: parent.horizontalCenter }
Text { text: album; anchors.horizontalCenter: parent.horizontalCenter }
Text { text: date; anchors.horizontalCenter: parent.horizontalCenter }
}
}
}
GridView {
id: grid
anchors.fill: parent
cellWidth: 150; cellHeight: 150
model: albumModel
delegate: albumDelegate
highlight: Rectangle {color: "lightsteelblue"; radius: 5 }
focus: true;
}
}
Когда я запускаю программу, я получаю этоошибка:
ReferenceError: albumModel is not defined
В подобных вопросах у большинства пользователей возникает эта проблема, поскольку они устанавливают контекст после загрузки файла qml, но это не мой случай.