Hello!
Thank You for your reply. I want expect what you write. But I don't know, how...
I attach a simple example.
The interesting part is in the qml file's mousearea section. I can reach the index, and the title also... But I cannot change the title 
Maybe only I forgot to set a flag or something like this.
I think, that 'setData' should be called somehow as when the data populates from the model to the view - it's achieved by the 'data' function.
QmlModel.zip
main.cpp
#include <QApplication>
#include <QMessageBox>
#include "mainwidget.h"
int main(int argc, char** argv)
{
MainWidget* mainWidget=new MainWidget();
mainWidget->show();
int r=0;
try
{
r=a.exec();
}catch (...)
{
r=-1;
}
delete mainWidget;
return r;
}
#include <QApplication>
#include <QMessageBox>
#include "mainwidget.h"
int main(int argc, char** argv)
{
QApplication a (argc, argv);
MainWidget* mainWidget=new MainWidget();
mainWidget->show();
int r=0;
try
{
r=a.exec();
}catch (...)
{
QMessageBox::critical(NULL, QObject::tr("Error"), QObject::tr("Critical error - Unhandled exception in the application!"));
r=-1;
}
delete mainWidget;
return r;
}
To copy to clipboard, switch view to plain text mode
mainwidget.h
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <QtDeclarative/QDeclarativeView>
#include "dummymodel.h"
class MainWidget : public QDeclarativeView
{
Q_OBJECT;
public:
~MainWidget();
public slots:
private:
QDeclarativeContext* m_context;
DummyModel model;
};
#endif // MAINWIDGET_H
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <QtDeclarative/QDeclarativeView>
#include "dummymodel.h"
class MainWidget : public QDeclarativeView
{
Q_OBJECT;
public:
MainWidget(QWidget* parent=0);
~MainWidget();
public slots:
private:
QDeclarativeContext* m_context;
DummyModel model;
};
#endif // MAINWIDGET_H
To copy to clipboard, switch view to plain text mode
mainwidget.cpp
#include "mainwidget.h"
#include <QtDeclarative>
#include <QDeclarativeContext>
MainWidget
::MainWidget(QWidget* parent
) : QDeclarativeView
(parent
){
setResizeMode(QDeclarativeView::SizeRootObjectToView);
setMinimumSize(300,300);
m_context=rootContext();
m_context->setContextProperty("dummyModel", &model);
setSource
(QUrl("qml/qmlModel/main.qml"));
}
MainWidget::~MainWidget()
{
}
#include "mainwidget.h"
#include <QtDeclarative>
#include <QDeclarativeContext>
MainWidget::MainWidget(QWidget* parent) : QDeclarativeView(parent)
{
setResizeMode(QDeclarativeView::SizeRootObjectToView);
setMinimumSize(300,300);
m_context=rootContext();
m_context->setContextProperty("dummyModel", &model);
setSource(QUrl("qml/qmlModel/main.qml"));
}
MainWidget::~MainWidget()
{
}
To copy to clipboard, switch view to plain text mode
dummymodel.h
#ifndef DUMMYMODEL_H
#define DUMMYMODEL_H
#include <QAbstractListModel>
#include <QStringList>
{
Q_OBJECT
public:
enum DummyRoles {
TitleRole=Qt::UserRole+1
};
~DummyModel();
private:
void fillData();
};
#endif // DUMMYMODEL_H
#ifndef DUMMYMODEL_H
#define DUMMYMODEL_H
#include <QAbstractListModel>
#include <QStringList>
class DummyModel : public QAbstractListModel
{
Q_OBJECT
public:
enum DummyRoles {
TitleRole=Qt::UserRole+1
};
DummyModel(QObject* parent=NULL);
~DummyModel();
int rowCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
bool setData(const QModelIndex &index, const QVariant &value, int role);
private:
void fillData();
QStringList m_data;
};
#endif // DUMMYMODEL_H
To copy to clipboard, switch view to plain text mode
dummymodel.cpp
#include "dummymodel.h"
#include <QDateTime>
{
m_data.clear();
QHash<int, QByteArray> roles;
roles[TitleRole]="title";
setRoleNames(roles);
fillData();
}
DummyModel::~DummyModel()
{
}
int DummyModel
::rowCount(const QModelIndex &parent
) const {
return m_data.count();
}
{
qDebug("dummymodel::data");
qDebug("Role: %d", role);
if (!index.
isValid()) return QVariant();
if ((index.
row()<
0) ||
(index.
row()>
=m_data.
count())) return QVariant();
if (role==TitleRole)
return m_data.at(index.row());
}
void DummyModel::fillData()
{
beginResetModel();
m_data.clear();
int num=1+qrand()%8;
for (int i=0; i<num; i++)
{
m_data.
append(QString("DummyText%1").
arg(i
+1));
}
endResetModel();
}
{
qDebug("SetData called");
return true;
}
#include "dummymodel.h"
#include <QDateTime>
DummyModel::DummyModel(QObject *parent) : QAbstractListModel(parent)
{
m_data.clear();
QHash<int, QByteArray> roles;
roles[TitleRole]="title";
setRoleNames(roles);
fillData();
}
DummyModel::~DummyModel()
{
}
int DummyModel::rowCount(const QModelIndex &parent) const
{
return m_data.count();
}
QVariant DummyModel::data(const QModelIndex &index, int role) const
{
qDebug("dummymodel::data");
qDebug("Role: %d", role);
if (!index.isValid()) return QVariant();
if ((index.row()<0) || (index.row()>=m_data.count())) return QVariant();
if (role==TitleRole)
return m_data.at(index.row());
return QVariant();
}
void DummyModel::fillData()
{
qsrand(QDateTime::currentMSecsSinceEpoch());
beginResetModel();
m_data.clear();
int num=1+qrand()%8;
for (int i=0; i<num; i++)
{
m_data.append(QString("DummyText%1").arg(i+1));
}
endResetModel();
}
bool DummyModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
qDebug("SetData called");
return true;
}
To copy to clipboard, switch view to plain text mode
and the qml file:
main.qml
import QtQuick 1.0
Rectangle {
id: base
width: 500
height: 360
Repeater {
model: dummyModel
delegate: myDelegate
}
Component {
id: myDelegate
Rectangle {
x: 10
y: index*35+10
width: 200
height: 30
color: "yellow"
TextEdit {
text: title
font.pointSize: 18
}
MouseArea {
anchors.fill: parent
onClicked: {
console.log("Clicked index:",index);
title="test"
}
}
}
}
}
import QtQuick 1.0
Rectangle {
id: base
width: 500
height: 360
Repeater {
model: dummyModel
delegate: myDelegate
}
Component {
id: myDelegate
Rectangle {
x: 10
y: index*35+10
width: 200
height: 30
color: "yellow"
TextEdit {
text: title
font.pointSize: 18
}
MouseArea {
anchors.fill: parent
onClicked: {
console.log("Clicked index:",index);
title="test"
}
}
}
}
}
To copy to clipboard, switch view to plain text mode
Bookmarks