Error when using C++ class Linked to QML



  • iam using Qt Quick Control 2 in Qt 5.7 iam try to connect a c++ class to qml i use this code in main

    #include <QGuiApplication>
    #include <QQmlApplicationEngine>
    #include <QQmlEngine>
    #include <QQmlContext>
    #include "mainwindow.h"
    
    int main(int argc, char *argv[])
    {
        QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
        QGuiApplication app(argc, argv);
    
        qputenv("QT_QUICK_CONTROLS_STYLE", "Flat");
        
        QScopedPointer<MainWindow> MyClass(new MainWindow);
        QQmlApplicationEngine engine;
        engine.load(QUrl(QLatin1String("qrc:/Main.qml")));
        engine.rootContext()->setContextProperty("MyClass",MyClass.data());
    
        return app.exec();
    }
    
    

    the class i use
    MainWindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    #include <QObject>
    #include <QPoint>
    
    
    class MainWindow : public QObject
    {
        Q_OBJECT
    public:
        explicit MainWindow(QObject *parent = 0);
        Q_INVOKABLE void check();
    };
    
    #endif // MAINWINDOW_H
    
    

    and .cpp

    #include "mainwindow.h"
    #include <QDebug>
    MainWindow::MainWindow(QObject *parent) :
        QObject(parent)
    {
    
    }
    
    void MainWindow::check()
    {
        qDebug() << "hello";
    }
    
    

    i can't use the MyClass in qml when i use it i get error on the line i use in qml file

    qml

    import QtQuick 2.4
    import QtQuick 2.5
    import QtQuick.Controls 2.0
    import QtQuick.Dialogs 1.2
    import QtQuick.Layouts 1.1
    import QtQuick.Window 2.0
    
    ApplicationWindow {
        id: window
        width: 480
        height: 480
        title: "Flat Example"
        visible: true
    
        MainForm {
            id: amr
            visible: true
            text3.x: amr.width / 2 - 60
            MyClass.check() // i got error here red line under this 
        }
    }
    
    

    when i try to run i got

    qrc:/Main.qml:19 Syntax error
    
    

    so what i do wrong ?
    Thanks in Advance


  • Moderators

    Hi! "MyClass.check()" is a function call. But that's not allowed there.



  • @Wieland what should i do to use this function from c++ class ?


  • Moderators

    That depends. When do you want to call the function?



  • @Wieland Thank you it solve i add it to button function

            button1.onClicked: {
                MyClass.check()
            }
    


  • @AmrCoder

    First post.

    You stole my Class. Amazingly this is word for word for what I'm doing at the moment with the exception of the qputenv(). Must check that! And I had the same problem and solved it in the same manner. I've just returned to programming after several years out of the game,


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.