Unsolved Implementation of displaying a dynamic data in listview on click of a button
-
Hi Team,
I am new to Qt QML world, and am struggling to implement a requirement of displaying a dynamic data in listview on click of a button. Can any one help me on this ?
Requirement: On button click, the parameters are passed to C++ code, fetches the dynamic data from backend or middleware and displays it on qml listview.
main.cpp
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QGuiApplication app(argc, argv); QQmlApplicationEngine engine; 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);*/ engine.rootContext()->setContextProperty("xyzModel", new xyzModel()); engine.load(url); return app.exec();
}
xyzModel.h
class xyzModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit xyzModel();enum PARAMS { DESCRIPTION = 0, EDITABLE, }; // QAbstractItemModel interface int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; QHash<int, QByteArray> roleNames() const override; // QtableName and tableNo will be sent from the QML Q_INVOKABLE void xyzTableParams(QString QtableName, int tableNo);
public slots:
private:
QList <xyzTable *> m_list;};
xyzModel.cpp
void xyzModel::xyzTableParams(QString QtableName, int tableNo)
{
// get_table_data returns a structure from backend or middleware
int status = get_table_data(QtableName.toLatin1().data(), tableNo);//get_item_count returns number of items from backend or middleware int mTotalObjectCount = get_item_count(); for(int iLoop = 0; iLoop < mTotalObjectCount; iLoop++) { // get_item_data_address returns the structure from backend or middleware xyz_item_data* p_item_data = get_item_data_address(iLoop); xyzTable *xyztableObj = new xyzTable; xyztableObj->setdescription(QString((char*)p_item_data->description)); xyztableObj->seteditable(p_item_data->editable); m_list.append(xyztableObj); }
}
xyzTable.h
class xyzTable
{
public:
xyzTable();QString description() const; void setdescription(const QString &description); unsigned char editable() const; void seteditable(unsigned char editable);
private:
QString m_description;
unsigned char m_editable;
};xyzTable.cpp
xyzTable::xyzTable()
{}
QString xyzTable::description() const
{
return m_description;
}void xyzTable::setdescription(const QString &description)
{
m_description = description;
}unsigned char xyzTable::editable() const
{
return m_editable;
}void xyzTable::seteditable(unsigned char editable)
{
m_editable = editable;
}main.qml
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")Button { id: btnId text: "TST_CGF1" onClicked: ccnModel.ccnTableParams("TST_CGF1", 2) } ListView { id: lv width: parent.width height: 400 anchors.left: parent.left anchors.top: btnId.bottom model: ccnModel delegate: del focus: true } Component { id: del Rectangle { width: 300; height: 50; color: "black" Row { spacing: 10 anchors.centerIn: parent Text { color: "white" text: Description font.pixelSize: 20 } Text { color: "white" text: Editable font.pixelSize: 20 } } } }
Can anyone help me in understanding where am doing wrong or can provide some sudo code how to be shown the dynamic data on list view on click of a button