Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Errors while loading Qt include files
Forum Updated to NodeBB v4.3 + New Features

Errors while loading Qt include files

Scheduled Pinned Locked Moved Solved QML and Qt Quick
5 Posts 3 Posters 362 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    Pierre Castor
    wrote on last edited by Pierre Castor
    #1

    Hi,
    i have a problem in a project where i want to mix Qt/C++ and QML. I don't know why but Qt Creator tell me that there is 39 problems in different Qt include files (sorry i didn't find how to put it in English) :
    Errors

    So, as you can see, errors got an encoding problem and it seems unlogic. It happens since i try to adaptate my Line class to pass it by context property to my Qml.

    This is my .pro file :

    QT += quick quickcontrols2 core
    
    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 += \
            entite.cpp \
            ligne.cpp \
            main.cpp
    
    RESOURCES += qml.qrc \
                icons/index.theme \
                icons/20x20/back.png \
                icons/20x20/drawer.png \
                icons/20x20/menu.png \
                icons/20x20@2/back.png \
                icons/20x20@2/drawer.png \
                icons/20x20@2/menu.png \
                icons/20x20@3/back.png \
                icons/20x20@3/drawer.png \
                icons/20x20@3/menu.png \
                icons/20x20@4/back.png \
                icons/20x20@4/drawer.png \
                icons/20x20@4/menu.png \
    
    # 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
    
    HEADERS += \
        entite.h \
        ligne.h
    
    

    The Line class (.h) :

    #ifndef LIGNE_H
    #define LIGNE_H
    
    #include <QObject>
    #include <QVector>
    #include <QVariant>
    #include <time.h>
    #include "entite.h"
    
    
    class Ligne : public QObject
    {
        Q_OBJECT
    
        Q_PROPERTY(QString name READ getName CONSTANT)
        Q_PROPERTY(QVector<QVariant> inTab READ getIn CONSTANT)
        Q_PROPERTY(QVector<QVariant> outTab READ getOut CONSTANT)
    
    
    private:
        QVector<QVariant> inTab;
        QVector<QVariant> outTab;
        QString name;
    
    public:
        Ligne(QString,int,int);
        Ligne(const Ligne&);
        inline QList<QVariant> getIn() { return QVariantList::fromVector(inTab);}
        inline QList<QVariant> getOut() {return QVariantList::fromVector(outTab);}
        inline QString getName() { return name;}
    
        inline QVariant getIn(int index) { return inTab.at(index);}
        inline QVariant getOut(int index) { return outTab.at(index);}
        inline void addIn(QString name, int value) {inTab.push_back(QVariant::fromValue(entite(name,value)));}
        inline void addOut(QString name, int value) {outTab.push_back(QVariant::fromValue(entite(name,value)));}
    
    
    
    };
    
    Q_DECLARE_METATYPE(Ligne)
    
    
    #endif // LIGNE_H
    
    

    The Line class (.cpp) :

    #include "ligne.h"
    
    
    Ligne::Ligne(QString _name, int nbIn, int nbOut)
    {
        name = _name;
        srand( (unsigned)time(NULL) );
    
        for(int i=0; i<nbIn;i++)
            addIn(QString("Entree "+QString::number(i+1)),int(rand() % 2));
    
    
        for(int i=0; i<nbOut;i++)
            addOut(QString("Sortie "+QString::number(i+1)),int(rand() % 2));
    
    }
    
    Ligne::Ligne(const Ligne& _ligne)
    {
        name = _ligne.name;
        inTab = _ligne.inTab;
        outTab = _ligne.outTab;
    }
    
    

    And in conclusion my main.cpp :

    #include <QGuiApplication>
    #include <QtQml>
    #include <QSettings>
    #include <QQmlContext>
    #include <QQuickStyle>
    #include <QIcon>
    #include "ligne.h"
    
    int main(int argc, char *argv[])
    {
    #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
        QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    #endif
    
    
        QGuiApplication app(argc, argv);
    
        QIcon::setThemeName("gallery");
    
    
        QSettings settings;
        if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE"))
            QQuickStyle::setStyle(settings.value("style").toString());
    
    
        const QString styleInSettings = settings.value("style").toString();
        if (styleInSettings.isEmpty())
            settings.setValue(QLatin1String("style"), QQuickStyle::name());
    
        QQmlApplicationEngine engine;
        const QUrl url(QStringLiteral("qrc:/Main.qml"));
    
        QStringList builtInStyles = { QLatin1String("Basic"), QLatin1String("Fusion"),
            QLatin1String("Imagine"), QLatin1String("Material"), QLatin1String("Universal") };
    #if defined(Q_OS_MACOS)
        builtInStyles << QLatin1String("macOS");
    #elif defined(Q_OS_WINDOWS)
        builtInStyles << QLatin1String("Windows");
    #endif
    
        QVariantList datalist = {
            QVariant::fromValue(Ligne(QString("Test 1"),10,10)),
            QVariant::fromValue(Ligne(QString("Test 2"),10,10)),
            QVariant::fromValue(Ligne(QString("Test 3"),10,10)),
            QVariant::fromValue(Ligne(QString("Test 4"),10,10))
        };
    
        engine.setInitialProperties({{ "builtInStyles", builtInStyles }});
    
    
         engine.rootContext()->setContextProperty("dataModel", datalist);
    
    
        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();
    }
    

    Someone got an idea of my problem please ? :)

    KroMignonK 1 Reply Last reply
    0
    • P Offline
      P Offline
      Pierre Castor
      wrote on last edited by Pierre Castor
      #5

      You are right, it seems the problem come from my copy constructor which i can't do because of the inheritance of QObject. So i replaced it by QGadget and it works well (I also created a new project to begin on clean base). Thanks a lot !

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #2

        Hi and welcome to devnet,

        Your RESOURCES variable content looks wrong.

        It should be a list of .qrc files unless I missed something in the latest versions.

        You also have one backslash at the end of the last entry and you should not.

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        3
        • P Offline
          P Offline
          Pierre Castor
          wrote on last edited by
          #3

          Hi, thanks for your answer, i removed the backslash but it changed nothing. :'(

          Regarding my resources, i have one qrc file which list each of my qml file :

          QRC file

          isn't it correct ?

          1 Reply Last reply
          0
          • P Pierre Castor

            Hi,
            i have a problem in a project where i want to mix Qt/C++ and QML. I don't know why but Qt Creator tell me that there is 39 problems in different Qt include files (sorry i didn't find how to put it in English) :
            Errors

            So, as you can see, errors got an encoding problem and it seems unlogic. It happens since i try to adaptate my Line class to pass it by context property to my Qml.

            This is my .pro file :

            QT += quick quickcontrols2 core
            
            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 += \
                    entite.cpp \
                    ligne.cpp \
                    main.cpp
            
            RESOURCES += qml.qrc \
                        icons/index.theme \
                        icons/20x20/back.png \
                        icons/20x20/drawer.png \
                        icons/20x20/menu.png \
                        icons/20x20@2/back.png \
                        icons/20x20@2/drawer.png \
                        icons/20x20@2/menu.png \
                        icons/20x20@3/back.png \
                        icons/20x20@3/drawer.png \
                        icons/20x20@3/menu.png \
                        icons/20x20@4/back.png \
                        icons/20x20@4/drawer.png \
                        icons/20x20@4/menu.png \
            
            # 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
            
            HEADERS += \
                entite.h \
                ligne.h
            
            

            The Line class (.h) :

            #ifndef LIGNE_H
            #define LIGNE_H
            
            #include <QObject>
            #include <QVector>
            #include <QVariant>
            #include <time.h>
            #include "entite.h"
            
            
            class Ligne : public QObject
            {
                Q_OBJECT
            
                Q_PROPERTY(QString name READ getName CONSTANT)
                Q_PROPERTY(QVector<QVariant> inTab READ getIn CONSTANT)
                Q_PROPERTY(QVector<QVariant> outTab READ getOut CONSTANT)
            
            
            private:
                QVector<QVariant> inTab;
                QVector<QVariant> outTab;
                QString name;
            
            public:
                Ligne(QString,int,int);
                Ligne(const Ligne&);
                inline QList<QVariant> getIn() { return QVariantList::fromVector(inTab);}
                inline QList<QVariant> getOut() {return QVariantList::fromVector(outTab);}
                inline QString getName() { return name;}
            
                inline QVariant getIn(int index) { return inTab.at(index);}
                inline QVariant getOut(int index) { return outTab.at(index);}
                inline void addIn(QString name, int value) {inTab.push_back(QVariant::fromValue(entite(name,value)));}
                inline void addOut(QString name, int value) {outTab.push_back(QVariant::fromValue(entite(name,value)));}
            
            
            
            };
            
            Q_DECLARE_METATYPE(Ligne)
            
            
            #endif // LIGNE_H
            
            

            The Line class (.cpp) :

            #include "ligne.h"
            
            
            Ligne::Ligne(QString _name, int nbIn, int nbOut)
            {
                name = _name;
                srand( (unsigned)time(NULL) );
            
                for(int i=0; i<nbIn;i++)
                    addIn(QString("Entree "+QString::number(i+1)),int(rand() % 2));
            
            
                for(int i=0; i<nbOut;i++)
                    addOut(QString("Sortie "+QString::number(i+1)),int(rand() % 2));
            
            }
            
            Ligne::Ligne(const Ligne& _ligne)
            {
                name = _ligne.name;
                inTab = _ligne.inTab;
                outTab = _ligne.outTab;
            }
            
            

            And in conclusion my main.cpp :

            #include <QGuiApplication>
            #include <QtQml>
            #include <QSettings>
            #include <QQmlContext>
            #include <QQuickStyle>
            #include <QIcon>
            #include "ligne.h"
            
            int main(int argc, char *argv[])
            {
            #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
                QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
            #endif
            
            
                QGuiApplication app(argc, argv);
            
                QIcon::setThemeName("gallery");
            
            
                QSettings settings;
                if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE"))
                    QQuickStyle::setStyle(settings.value("style").toString());
            
            
                const QString styleInSettings = settings.value("style").toString();
                if (styleInSettings.isEmpty())
                    settings.setValue(QLatin1String("style"), QQuickStyle::name());
            
                QQmlApplicationEngine engine;
                const QUrl url(QStringLiteral("qrc:/Main.qml"));
            
                QStringList builtInStyles = { QLatin1String("Basic"), QLatin1String("Fusion"),
                    QLatin1String("Imagine"), QLatin1String("Material"), QLatin1String("Universal") };
            #if defined(Q_OS_MACOS)
                builtInStyles << QLatin1String("macOS");
            #elif defined(Q_OS_WINDOWS)
                builtInStyles << QLatin1String("Windows");
            #endif
            
                QVariantList datalist = {
                    QVariant::fromValue(Ligne(QString("Test 1"),10,10)),
                    QVariant::fromValue(Ligne(QString("Test 2"),10,10)),
                    QVariant::fromValue(Ligne(QString("Test 3"),10,10)),
                    QVariant::fromValue(Ligne(QString("Test 4"),10,10))
                };
            
                engine.setInitialProperties({{ "builtInStyles", builtInStyles }});
            
            
                 engine.rootContext()->setContextProperty("dataModel", datalist);
            
            
                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();
            }
            

            Someone got an idea of my problem please ? :)

            KroMignonK Offline
            KroMignonK Offline
            KroMignon
            wrote on last edited by KroMignon
            #4

            @Pierre-Castor said in Errors while loading Qt include files:

            Someone got an idea of my problem please ? :)

            I think the problem is that you Ligne class do not have any default/copy constructor and so cannot be used in a list.

            EDIT: cf https://doc.qt.io/qt-5/qlist.html#details

            It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

            1 Reply Last reply
            3
            • P Offline
              P Offline
              Pierre Castor
              wrote on last edited by Pierre Castor
              #5

              You are right, it seems the problem come from my copy constructor which i can't do because of the inheritance of QObject. So i replaced it by QGadget and it works well (I also created a new project to begin on clean base). Thanks a lot !

              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved