.cpp파일에서 데이터를 받아와 .qml에 전달 하기 위해서는 Q_INVOKABLE 을 통하여

전달 할 수 가 있다.

 

아래는 예제 소스 코드이다.

.pro

QT+=qml quick widgets

 

main.cpp

#include<QGuiApplication>

#include<QQmlApplicationEngine>
#include<QQmlContext>
#include<testmodel.h>

intmain(intargc,char*argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplicationapp(argc,argv);

QQmlApplicationEngineengine;

TestModel* testModel = newTestModel;
testModel->addTest("id","pw","email");
engine.rootContext()->setContextProperty("testModel",testModel);
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
if(engine.rootObjects().isEmpty())
return-1;

returnapp.exec();
}

testmodel.h

#ifndefTESTMODEL_H

#defineTESTMODEL_H

#include<QObject>
#include<QStandardItemModel>

classQStandardItem;

classTestModel:publicQStandardItemModel
{
public:
enumTestRoles
{
IndexRole=Qt::UserRole+1,
TestIdRole,
TestPwRole,
TestEmailRole
};
private:
QHash<int,QByteArray> m_testRoleNames;
public:
TestModel(QObject*parent=0);
Q_INVOKABLE void addTest(constQString&id,constQString&pw,constQString&email);
protected:
QHash <int,QByteArray> roleNames() const;
};

#endif//TESTMODEL_H

 

testmodel.cpp

#include“testmodel.h”

#include<QDebug>
TestModel::TestModel(QObject*parent):QStandardItemModel(parent)
{
m_testRoleNames[IndexRole]="id";
m_testRoleNames[TestIdRole]="testId";
m_testRoleNames[TestPwRole]="testPw";
m_testRoleNames[TestEmailRole]="testEmail";
}

voidTestModel::addTest(const QString &id,const QString &pw,const QString &email)
{
QStandardItem * entry = new QStandardItem();
entry->setData(0,IndexRole);
entry->setData(id,TestIdRole);
entry->setData(pw,TestPwRole);
entry->setData(email,TestEmailRole);
this->appendRow(entry);
}

QHash<int,QByteArray>TestModel::roleNames()const
{
returnm_testRoleNames;
}


 

IndexRole값은 순차적으로 값을 넣어주면 된다.

추후 TableView에서 클릭시 index로 값을 찾을 수 있다.

QStandardItem을 통하여 미리 정의된 Role값에 데이터를 넣어주면 model데이터가 완성된다.

이 모델 데이터를 .qml에서 model : testModel로 호출해주면 된다.

 

TestTableView.qml

TableView{

id:testTableView
anchors.fill:parent
model:testModel
itemDelegate:Rectangle{
Text{
anchors.verticalCenter:parent.verticalCenter
text:styleData.value===undefined?"":styleData.value
}
}
TableViewColumn{
role:"testId"
title:qsTr("Id")
horizontalAlignment:Text.AlignHCenter
}
TableViewColumn{
role:"testPw"
title:qsTr("Pw")
horizontalAlignment:Text.AlignHCenter
}
TableViewColumn{
role:"testEmail"
title:qsTr("Email")
horizontalAlignment:Text.AlignHCenter
}
}


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다