Created
September 6, 2020 18:44
-
-
Save ribtoks/62b68d2b1c219770b683e96cebc75d0f to your computer and use it in GitHub Desktop.
Parent is null for ListView delegate in Qt 5.15
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <QAbstractListModel> | |
#include <QGuiApplication> | |
#include <QQmlApplicationEngine> | |
#include <QtGlobal> | |
#include <QQmlContext> | |
#include <iostream> | |
void myMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { | |
QString logLine = qFormatLogMessage(type, context, msg); | |
std::cout << logLine.toStdString() << std::endl; | |
} | |
class CppModel: public QAbstractListModel { | |
// QAbstractItemModel interface | |
public: | |
virtual int rowCount(const QModelIndex &parent) const override { return 100; } | |
virtual QVariant data(const QModelIndex &index, int role) const override { | |
if (role == (Qt::DisplayRole + 1)) { | |
return QString("Element %1").arg(index.row()); | |
} | |
return QVariant(); | |
} | |
virtual QHash<int, QByteArray> roleNames() const override { | |
return {{(Qt::DisplayRole+1), "itemName"}}; | |
} | |
}; | |
int main(int argc, char *argv[]) | |
{ | |
qSetMessagePattern("%{time hh:mm:ss.zzz} %{type} T#%{threadid} %{function} - %{message}"); | |
qInstallMessageHandler(myMessageHandler); | |
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); | |
QGuiApplication app(argc, argv); | |
QQmlApplicationEngine engine; | |
CppModel cppModel; | |
engine.rootContext()->setContextProperty("cppModel", &cppModel); | |
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(); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import QtQuick 2.15 | |
import QtQuick.Window 2.15 | |
Window { | |
width: 640 | |
height: 480 | |
visible: true | |
title: qsTr("Hello World") | |
ListView { | |
anchors.fill: parent | |
model: cppModel | |
delegate: Rectangle { | |
anchors.left: parent.left | |
anchors.right: parent.right | |
height: 50 | |
anchors.margins: 1 | |
color: "#efefef" | |
Text { text: model.itemName } | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
QT += quick | |
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 | |
SOURCES += \ | |
main.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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment