#include #include #include #include #include #include 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 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(); }