qml -> cpp 함수 호출 (signal&slot)

mission

qml에 있는 회색 버튼을 누르면 cpp 함수가 실행되는 것 !!!!!!!!!!!!!!! wow



main.cpp

menu 헤더파일을 include하고 menu app 실행

# main.cpp : 그냥 메인.. 시작하는 코드 !
#include "menu.h"

int main(int argc, char *argv[])
{
    menu app(argc, argv);

    return app.exec();
}

main.qml

signal 함수 정의 하고 버튼 클릭 시 함수를 호출 !

import QtQuick 2.6
import QtQuick.Window 2.2

Item{

    property int num: 1
    signal qmlsignal(int getnum)
//    signal에 대한 함수 정의

    width: 200
    height: 200

    Rectangle {
        width: 100
        height: 100
        color: "gray"

        MouseArea{
            anchors.fill: parent
            onClicked:{
                qmlsignal(num)
//                내부 영역 클릭 시 qmlsignal(num) 호출
            }
        }
    }
}


view.h

위에서 signal함수를 정의했으니, 여기선 그 signal이 동작했을 때 호출될 slot 함수를 정의내림. 구체적인 내용은 view.cpp에서 !

#include <QQuickView>
#include <QObject>

class view :public QQuickView
{
Q_OBJECT
public:
    view();

public slots :
    void qmlslot(int);
};

view.cpp

slot 함수에 대한 구체적인 내용 기술되어있음.

#include <QDebug>
#include "view.h"

view::view()
{

}

void view::qmlslot(int getnum)
{
    qDebug() << "call qmlslot func!!!!!!!!!!!";
}


menu.h

menu.cpp에서 사용하는 함수들 정의

#include <QGuiApplication>
#include <QQuickItem>
#include "view.h"

class menu : public QGuiApplication
{
public:
    menu(int &, char **);

    void init();

    void showqml();

    view *m_pQuickView;
};

menu.cpp

slot 함수 가지는 view 객체를 하나 만들고 signal과 slot 을 연결시켜주는 부분
연결 시켜 준다는게, signal 함수랑 slot 함수 따로따로 만들었으니까
이 시그널이 --> 이 슬롯으로 연결된다는 걸 적어줘야함 ~~~!!!!

#include "menu.h"

menu::menu(int &argc, char *argv[]) : QGuiApplication(argc, argv)
{
    init();
    showqml();
}

void menu::init()
{
    m_pQuickView = new view();

    m_pQuickView->setSource(QUrl(QStringLiteral("qrc:/main.qml")));
    QObject *item = m_pQuickView->rootObject();
//    cpp내에서 main.qml에 접근하기 위함임

    QObject::connect(item, SIGNAL(qmlsignal(int)), m_pQuickView, SLOT(qmlslot(int)));
//    main.qml에서 qmlsignal(int) signal이 발생될 때
//    m_pQuickView 객체의 slot 함수인 qmlslot(int)이 호출되도록
}

void menu::showqml()
{
    m_pQuickView->show();
}


결과

  • 버튼을 누르면 debug 로그가 찍힘 !

좋은 웹페이지 즐겨찾기