Hi,
I want to display data in TableView which I am getting from XML file.
I wrote this code, but I have some error like this:
'QObject::QObject' : cannot access private member declared in class 'QObject' => error of dataobject.h
my code is correct?
main.cpp:
MyModel mymodel;
engine.rootContext()->setContextProperty("mymodel", &mymodel);
MyModel mymodel;
engine.rootContext()->setContextProperty("mymodel", &mymodel);
To copy to clipboard, switch view to plain text mode
main.qml:
TableView {
id: tablemodel
MyTableViewColumn {
role: "pro1"
title: "pro1"
width: 70
}
...
...
MyTableViewColumn {
role: "pro11"
title: "pro11"
width: 60
}
MyTableViewColumn {
role: "index"
title: " "
width: 30
}
model: ListModel {
id: myModel
source:myModel.mydata
}
}
TableView {
id: tablemodel
MyTableViewColumn {
role: "pro1"
title: "pro1"
width: 70
}
...
...
MyTableViewColumn {
role: "pro11"
title: "pro11"
width: 60
}
MyTableViewColumn {
role: "index"
title: " "
width: 30
}
model: ListModel {
id: myModel
source:myModel.mydata
}
}
To copy to clipboard, switch view to plain text mode
dataobject.h:
#ifndef DATAOBJECT_H
#define DATAOBJECT_H
#include <QObject>
{
Q_OBJECT
Q_PROPERTY(QString newIndex READ getIndex WRITE setIndex NOTIFY indexChanged
) Q_PROPERTY(QString newpro1 READ getpro1 WRITE setpro1 NOTIFY pro1Changed
) ...
...
Q_PROPERTY(QString newpro11 READ getpro11 WRITE setpro11 NOTIFY pro11Changed
) Q_PROPERTY(QByteArray newImage READ getImage WRITE setImage NOTIFY imageChanged
)
public:
DataObject();
DataObject
(QString,
QString,
QString,
QString,
QString,
QString,
QString,
QString,
QString,
QString,
QString);
Q_INVOKABLE
QString getIndex
() const;
Q_INVOKABLE
QString getpro1
() const;
...
...
Q_INVOKABLE QString getpro11
() const;
public slots:
..
...
signals:
...
...
private:
...
...
};
#endif // DATAOBJECT_H
#ifndef DATAOBJECT_H
#define DATAOBJECT_H
#include <QObject>
class DataObject: public QObject
{
Q_OBJECT
Q_PROPERTY(QString newIndex READ getIndex WRITE setIndex NOTIFY indexChanged)
Q_PROPERTY(QString newpro1 READ getpro1 WRITE setpro1 NOTIFY pro1Changed)
...
...
Q_PROPERTY(QString newpro11 READ getpro11 WRITE setpro11 NOTIFY pro11Changed)
Q_PROPERTY(QByteArray newImage READ getImage WRITE setImage NOTIFY imageChanged)
public:
DataObject();
DataObject(QString,QString,QString,QString,QString,QString,QString,QString,QString,QString,QString);
Q_INVOKABLE QString getIndex() const;
Q_INVOKABLE QString getpro1() const;
...
...
Q_INVOKABLE QString getpro11() const;
Q_INVOKABLE QByteArray getImage() const;
public slots:
void setIndex(QString index);
void setpro1(QString pro1);
..
...
void setpro11(QString pro11);
void setImage(QByteArray image);
signals:
void indexChanged(QString);
void pro1Changed(QString);
...
...
void pro11Changed(QString);
void imageChanged(QByteArray);
private:
QString newIndex;
QString newpro1;
...
...
QString newpro11
QByteArray newImage;
};
#endif // DATAOBJECT_H
To copy to clipboard, switch view to plain text mode
dataobject.cpp:
#include "dataobject.h"
DataObject::DataObject()
{
}
{
newpro1=pro1;
...
...
newpro11=pro11;
}
QString DataObject
::getpro1() const {
return newpro1;
}
void DataObject
::setpro1(QString pro1
) {
if (pro1 != newpro1)
{
newpro1= pro1;
emit pro11Changed(pro1);
}
}
...
...
QString DataObject
::getpro11() const {
return newpro11;
}
void DataObject
::setpro11(QString pro11
) {
if (pro11 != newpro11)
{
newpro11= pro11;
emit pro11Changed(pro11);
}
}
{
return newImage;
}
{
if (image != newImage)
{
newImage= image;
emit imageChanged(image);
}
}
#include "dataobject.h"
DataObject::DataObject()
{
}
DataObject::DataObject(QString index,QString pro1,.......,QString pro11)
{
newpro1=pro1;
...
...
newpro11=pro11;
}
QString DataObject::getpro1() const
{
return newpro1;
}
void DataObject::setpro1(QString pro1)
{
if (pro1 != newpro1)
{
newpro1= pro1;
emit pro11Changed(pro1);
}
}
...
...
QString DataObject::getpro11() const
{
return newpro11;
}
void DataObject::setpro11(QString pro11)
{
if (pro11 != newpro11)
{
newpro11= pro11;
emit pro11Changed(pro11);
}
}
QByteArray DataObject::getImage() const
{
return newImage;
}
void DataObject::setImage(QByteArray image)
{
if (image != newImage)
{
newImage= image;
emit imageChanged(image);
}
}
To copy to clipboard, switch view to plain text mode
mymodel.h:
#ifndef MYMODEL_H
#define MYMODEL_H
#include <QAbstractListModel>
#include <dataobject.h>
{
Q_OBJECT
std::vector<DataObject> mydata;
public:
typedef std::vector<DataObject>::const_iterator const_iterator;
explicit MyModel
(QObject *parent
= 0);
enum {index,hardness,fromFirst,avgDiam,omgheAsar,firstDiam,secondDiam,timeNiro,niro,method,zoom,MAX_COLS};
QVariant headerData
(int section, Qt
::Orientation orientation,
int role
) const;
void addData(DataObject data);
void removeData(int row);
DataObject& getData(size_t index);
const_iterator begin()const{return mydata.begin();}
const_iterator end()const{return mydata.end();}
};
#endif // MYMODEL_H
#ifndef MYMODEL_H
#define MYMODEL_H
#include <QAbstractListModel>
#include <dataobject.h>
class MyModel : public QAbstractTableModel
{
Q_OBJECT
std::vector<DataObject> mydata;
public:
typedef std::vector<DataObject>::const_iterator const_iterator;
explicit MyModel(QObject *parent = 0);
enum {index,hardness,fromFirst,avgDiam,omgheAsar,firstDiam,secondDiam,timeNiro,niro,method,zoom,MAX_COLS};
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
void addData(DataObject data);
void removeData(int row);
bool setData(const QModelIndex &index, const QVariant &value, int role);
Qt::ItemFlags flags(const QModelIndex &index) const;
DataObject& getData(size_t index);
const_iterator begin()const{return mydata.begin();}
const_iterator end()const{return mydata.end();}
};
#endif // MYMODEL_H
To copy to clipboard, switch view to plain text mode
mymodel.cpp
#include "mymodel.h"
{
if(!index.isValid())
if(index.row() >= mydata.size() || index.row() < 0)
if(role == Qt::DisplayRole || role == Qt::EditRole)
{
switch(index.column())
{
case prop1:
return mydata[index.row()].getprop1();
...
...
case prop11:
return mydata[index.row()].getprop11();
}
}
}
QVariant MyModel
::headerData(int section, Qt
::Orientation orientation,
int role
) const {
if(role != Qt::DisplayRole)
if (orientation == Qt::Horizontal)
{
switch (section)
{
case 1:
return tr("pro1");
...
...
case 9:
return tr("pro11");
}
}
}
{
if (index.isValid() && role == Qt::EditRole && !(index.row() >= mydata.size() || index.row() < 0))
{
int row = index.row();
switch(index.column())
{
case 0:
mydata[row].setIndex(value.toString());
break;
case 1:
mydata[row].setpro1(value.toString());
break;
...
...
case 11:
mydata[row].setprop11(value.toString());
break;
default:
return false;
}
emit dataChanged(index, index);
return true;
}
return false;
}
Qt
::ItemFlags MyModel
::flags(const QModelIndex &index
) const{
if (!index.isValid())
return Qt::ItemIsEnabled;
}
void MyModel::addData(DataObject data)
{
if(std::find(mydata.begin(),mydata.end(),data)!=mydata.end())
return;
beginInsertRows
(QModelIndex(),mydata.
size(),mydata.
size());
/*BOOST_SCOPE_EXIT(this_){
this_->endInsertRows();
}BOOST_SCOPE_EXIT_END*/
mydata.push_back(std::move(data));
endInsertRows();
}
void MyModel::removeData(int row)
{
/*BOOST_SCOPE_EXIT(this_){
this_->endRemoveRows();
}BOOST_SCOPE_EXIT_END//*/
mydata.erase(std::next(mydata.begin(),row));
//endRemoveRows();
}
#include "mymodel.h"
QVariant MyModel::data(const QModelIndex &index, int role) const
{
if(!index.isValid())
return QVariant();
if(index.row() >= mydata.size() || index.row() < 0)
return QVariant();
if(role == Qt::DisplayRole || role == Qt::EditRole)
{
switch(index.column())
{
case prop1:
return mydata[index.row()].getprop1();
...
...
case prop11:
return mydata[index.row()].getprop11();
}
}
return QVariant();
}
QVariant MyModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if(role != Qt::DisplayRole)
return QVariant();
if (orientation == Qt::Horizontal)
{
switch (section)
{
case 1:
return tr("pro1");
...
...
case 9:
return tr("pro11");
}
}
return QVariant();
}
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (index.isValid() && role == Qt::EditRole && !(index.row() >= mydata.size() || index.row() < 0))
{
int row = index.row();
switch(index.column())
{
case 0:
mydata[row].setIndex(value.toString());
break;
case 1:
mydata[row].setpro1(value.toString());
break;
...
...
case 11:
mydata[row].setprop11(value.toString());
break;
default:
return false;
}
emit dataChanged(index, index);
return true;
}
return false;
}
Qt::ItemFlags MyModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::ItemIsEnabled;
return QAbstractTableModel::flags(index) | Qt::ItemIsEditable;
}
void MyModel::addData(DataObject data)
{
if(std::find(mydata.begin(),mydata.end(),data)!=mydata.end())
return;
beginInsertRows(QModelIndex(),mydata.size(),mydata.size());
/*BOOST_SCOPE_EXIT(this_){
this_->endInsertRows();
}BOOST_SCOPE_EXIT_END*/
mydata.push_back(std::move(data));
endInsertRows();
}
void MyModel::removeData(int row)
{
beginRemoveRows(QModelIndex(),row,row);
/*BOOST_SCOPE_EXIT(this_){
this_->endRemoveRows();
}BOOST_SCOPE_EXIT_END//*/
mydata.erase(std::next(mydata.begin(),row));
//endRemoveRows();
}
To copy to clipboard, switch view to plain text mode
myxml.xpp:
void MyXML::saveXMLFile()
{
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("NewDataSet");
xmlWriter.writeStartElement("header");
...
...
xmlWriter.writeEndElement();
MyModel model;
MyModel::const_iterator it = model.begin(),end = model.end();
for(;it != end;++it)
{
xmlWriter.writeStartElement("record");
// QFile fileImg(newImage);
// fileImg.open(QIODevice::ReadOnly);
// QByteArray imageData = fileImg.readAll();
// QByteArray imageData_Base64 = imageData.toBase64();
// xmlWriter.writeAttribute("image",imageData_Base64);
xmlWriter.writeTextElement("index",it->getIndex());
xmlWriter.writeTextElement("prop1",it->getprop1());
...
...
xmlWriter.writeTextElement("prop11",it->getprop11());
xmlWriter.writeEndElement();
}
xmlWriter.writeEndElement();
file.close();
}
void MyXML::readXMLFile()
{
{
//qDebug() << "Error: Cannot read file ";
return;
}
QXmlStreamReader reader(file.readAll());
file.close();
while(!reader.atEnd()) {
reader.readNext();
if (reader.isStartElement()) {
if (reader.name() == "header") {
foreach(const QXmlStreamAttribute &attr, reader.attributes()) {
...
...
}
}
else if (reader.name() == "recorde") {
foreach(const QXmlStreamAttribute &attr, reader.attributes()){
index=attr.value().toString();
}
prop1=attr.value().toString();
}
...
...
prop11=attr.value().toString();
}
}
MyModel model;
model.addData(DataObject(index,prop1,....,prop11));
}
}
}
}
void MyXML::saveXMLFile()
{
QFile file(newFileName);
file.open(QIODevice::WriteOnly);
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("NewDataSet");
xmlWriter.writeStartElement("header");
...
...
xmlWriter.writeEndElement();
MyModel model;
MyModel::const_iterator it = model.begin(),end = model.end();
for(;it != end;++it)
{
xmlWriter.writeStartElement("record");
// QFile fileImg(newImage);
// fileImg.open(QIODevice::ReadOnly);
// QByteArray imageData = fileImg.readAll();
// QByteArray imageData_Base64 = imageData.toBase64();
// xmlWriter.writeAttribute("image",imageData_Base64);
xmlWriter.writeTextElement("index",it->getIndex());
xmlWriter.writeTextElement("prop1",it->getprop1());
...
...
xmlWriter.writeTextElement("prop11",it->getprop11());
xmlWriter.writeEndElement();
}
xmlWriter.writeEndElement();
file.close();
}
void MyXML::readXMLFile()
{
QFile file(newFileName);
if (!file.open(QFile::ReadOnly | QFile::Text))
{
//qDebug() << "Error: Cannot read file ";
return;
}
QXmlStreamReader reader(file.readAll());
file.close();
while(!reader.atEnd()) {
reader.readNext();
if (reader.isStartElement()) {
if (reader.name() == "header") {
foreach(const QXmlStreamAttribute &attr, reader.attributes()) {
...
...
}
}
else if (reader.name() == "recorde") {
QString prop1,...,prop11;
foreach(const QXmlStreamAttribute &attr, reader.attributes()){
if(attr.name().toString() == QLatin1String("index")){
index=attr.value().toString();
}
else if(attr.name().toString() == QLatin1String("prop1")){
prop1=attr.value().toString();
}
...
...
else if(attr.name().toString() == QLatin1String("prop11")){
prop11=attr.value().toString();
}
}
MyModel model;
model.addData(DataObject(index,prop1,....,prop11));
}
}
}
}
To copy to clipboard, switch view to plain text mode
Bookmarks