model - QML Combobox reports ReferenceError: modelData is not defined -


i have following simple qml combobox:

import qtquick 2.0 import qtquick.controls 1.4  import si.mikroelektronika 1.0  item {     id: uestaffselector      width: 256     height: 96      combobox     {         model: uepeoplemodel          editable: false          anchors.fill: parent     }   // combobox }   // item 

as can see, assign uepeoplemodel it, working ok in app. once app executed, following qml runtime errors:

file:///opt/qtopensource55/5.5/gcc_64/qml/qtquick/controls/combobox.qml:562: referenceerror: modeldata not defined file:///opt/qtopensource55/5.5/gcc_64/qml/qtquick/controls/combobox.qml:562: referenceerror: modeldata not defined file:///opt/qtopensource55/5.5/gcc_64/qml/qtquick/controls/combobox.qml:562: referenceerror: modeldata not defined file:///opt/qtopensource55/5.5/gcc_64/qml/qtquick/controls/combobox.qml:562: referenceerror: modeldata not defined file:///opt/qtopensource55/5.5/gcc_64/qml/qtquick/controls/combobox.qml:562: referenceerror: modeldata not defined

whole application constructed in main.cpp:

#include <qtqml> #include <qapplication> #include <qqmlapplicationengine> #include <qtimer>  #include "database/uepeoplemodel.h" #include "core/ueapplicationstatus.h" #include "core/uedatabaseconnectionstatus.h" #include "core/uebluetoothmanager.h" #include "core/uebluetoothprinterconnectionstatus.h"  int main(int argc, char *argv[]) {     qapplication app(argc, argv);     qqmlapplicationengine engine;      ueapplicationstatus* ueapplicationstatus=new ueapplicationstatus(qapp);     uepeoplemodel* uepeoplemodel=new uepeoplemodel(qapp);     uebluetoothmanager* uebtmanager=new uebluetoothmanager(qapp);      qobject::connect(uepeoplemodel,                      signal(uesignaldatabaseconnectionchanged(uedatabaseconnectionstatus::uetypedatabaseconnectionstatus)),                      ueapplicationstatus,                      slot(ueslotdatabaseconnectionchanged(uedatabaseconnectionstatus::uetypedatabaseconnectionstatus)));      qobject::connect(uebtmanager,                      signal(uesignalbtprinterconnectionchanged(uebluetoothprinterconnectionstatus::uetypebluetootprinterconnectionstatus)),                      ueapplicationstatus,                      slot(ueslotbtprinterconnectionchanged(uebluetoothprinterconnectionstatus::uetypebluetootprinterconnectionstatus)));      engine.rootcontext()->setcontextproperty("uepeoplemodel",                                              uepeoplemodel);     engine.rootcontext()->setcontextproperty("ueapplicationstatus",                                              ueapplicationstatus);     engine.rootcontext()->setcontextproperty("uebtmanager",                                              uebtmanager);      engine.addimageprovider(qlatin1string("uepeoplemodel"),                             uepeoplemodel);      qmlregisteruncreatabletype<uedatabaseconnectionstatus>("si.mikroelektronika",                                                            1,                                                            0,                                                            "uetypedatabaseconnectionstatus",                                                            "database connection status");      qmlregisteruncreatabletype<uebluetoothprinterconnectionstatus>("si.mikroelektronika",                                                                    1,                                                                    0,                                                                    "uetypebluetootprinterconnectionstatus",                                                                    "bluetooth printer connection status");      engine.load(qurl(qstringliteral("qrc:/main.qml")));      uepeoplemodel->ueconnecttodatabase();     uebtmanager->uestartpairing();      //ueapplicationstatus->ueupdate(uepeoplemodel->uefetchusers());      return app.exec(); } 

here uepeoplemodel header, file uepeoplemodel.h:

#ifndef uepeoplemodel_h #define uepeoplemodel_h  #include <qimage> #include <qvariant> #include <qstringlist> #include <qhash> #include <qbytearray> #include <qsqlerror> #include <qsqlquerymodel> #include <qsqlrecord> #include <qmodelindex> #include <qquickimageprovider> #include <qbytearray> #include <qsqlrecord> #include <qsqlquery>  #include "../settings/uedefaults.h" #include "../core/uedatabaseconnectionstatus.h" #include "../core/uetypes.h" #include "../core/ueapplicationstatus.h" #include "../core/ueuserrecord.h"  class uepeoplemodel : public qsqlquerymodel,                       public qquickimageprovider {     q_object  private:     qsqldatabase m_uedb;  private:     qsqldatabase uedatabase() const         { return this->m_uedb; }     void uesetdatabase(const qsqldatabase& database)         { this->m_uedb=database; }     qimage ueimage(const qstring& id) const;  public:     uepeoplemodel(qobject *parent=0);     ~uepeoplemodel();      qvariant data(const qmodelindex &index,                   int role) const q_decl_override;     qimage requestimage(const qstring &id,                         qsize *size,                         const qsize &requestedsize);     uetyperoles rolenames() const;     void ueconnecttodatabase();     uetypeusers* uefetchusers();  public:     static const int uerolename=qt::userrole+1;     static const int ueroleimage=qt::userrole+2;     static const int uerolepassword=qt::userrole+3;  signals:     void uesignaldatabaseconnectionchanged(const uedatabaseconnectionstatus::uetypedatabaseconnectionstatus& newstatus); };  #endif // uepeoplemodel_h 

and implementation, file uepeoplemodel.cpp:

#include "uepeoplemodel.h"  uepeoplemodel::uepeoplemodel(qobject* parent)     : qsqlquerymodel(parent),       qquickimageprovider(qqmlimageproviderbase::image,                           qqmlimageproviderbase::forceasynchronousimageloading) {     emit this->uesignaldatabaseconnectionchanged(uedatabaseconnectionstatus::not_connected); }   // default constructor  uepeoplemodel::~uepeoplemodel() {     qstring connname=this->uedatabase().connectionname();      this->uedatabase().close();     this->uesetdatabase(qsqldatabase());     this->uedatabase().removedatabase(connname);      emit this->uesignaldatabaseconnectionchanged(uedatabaseconnectionstatus::not_connected); }   // default destructor  qvariant uepeoplemodel::data(const qmodelindex &index,                              int role) const {     switch(role)     {         case ueroleimage:         {             return qstring::number(index.row());         } break;    // case          case uerolename:         {             return this->record(index.row()).value(ueposdatabase::uetableindexes::uetablepeople::index_name).tostring();         } break;    // case          case uerolepassword:         {             return this->record(index.row()).value(ueposdatabase::uetableindexes::uetablepeople::index_apppassword).tostring();         } break;   // case          default:         {             return qsqlquerymodel::data(index,                                         role);         } break;    // default     }   // switch      return qvariant(); }   // data  qimage uepeoplemodel::ueimage(const qstring &id) const {     return qimage::fromdata(this->record(id.toint()).value(ueposdatabase::uetableindexes::uetablepeople::index_image).tobytearray(),                             "png").scaled(uedefaults::uegraphics::people_image_width,                                           uedefaults::uegraphics::people_image_height,                                           qt::ignoreaspectratio,                                           qt::smoothtransformation); }   // ueimage  qimage uepeoplemodel::requestimage(const qstring &id,                                    qsize *size,                                    const qsize &requestedsize) {     q_unused(size)     q_unused(requestedsize);  //    if(size) //    { //        *size=qsize(uedefaults::uegraphics::people_image_width, //                    uedefaults::uegraphics::people_image_height); //    }   // if      //return this->ueimage(id);      return qimage::fromdata(this->record(id.toint()).value(ueposdatabase::uetableindexes::uetablepeople::index_image).tobytearray(),                             "png").scaled(uedefaults::uegraphics::people_image_width,                                           uedefaults::uegraphics::people_image_height,                                           qt::ignoreaspectratio,                                           qt::smoothtransformation); }   // requestimage  uetyperoles uepeoplemodel::rolenames() const {     uetyperoles roles;      const int irolename=uepeoplemodel::uerolename;     const int iroleimage=uepeoplemodel::ueroleimage;     const int irolepassword=uepeoplemodel::uerolepassword;      roles.insert(irolename,                  "uerolename");     roles.insert(iroleimage,                  "ueroleimage");     roles.insert(irolepassword,                  "uerolepassword");      return roles; }   // rolenames  void uepeoplemodel::ueconnecttodatabase() {     if(!qsqldatabase::connectionnames().contains(ueposdatabase::uedatabaseconnectionnames::database_connection_name_people,                                                  qt::caseinsensitive))     {         this->uesetdatabase(qsqldatabase::adddatabase(ueposdatabase::database_driver,                                                       ueposdatabase::uedatabaseconnectionnames::database_connection_name_people));     }   // if      this->uedatabase().sethostname(ueposdatabase::uedatabaseconnectionparameters::database_hostname);     this->uedatabase().setdatabasename(ueposdatabase::uedatabaseconnectionparameters::database_name);     this->uedatabase().setusername(ueposdatabase::uedatabaseconnectionparameters::database_username);     this->uedatabase().setpassword(ueposdatabase::uedatabaseconnectionparameters::database_password);      if(this->uedatabase().open())     {         this->setquery(ueposdatabase::uesqlqueries::uetablepeople::sql_query_get_all_people,                        this->uedatabase());         emit this->uesignaldatabaseconnectionchanged(uedatabaseconnectionstatus::connected);     }     else     {         emit this->uesignaldatabaseconnectionchanged(uedatabaseconnectionstatus::not_connected);     }   // if }   // ueconnecttodatabase  uetypeusers* uepeoplemodel::uefetchusers() {     uetypeusers* users=new uetypeusers();      for(int iindex=0; iindex<this->record().count(); iindex++)     {         users->append(new ueuserrecord(this,                                        this->record(iindex).value(ueposdatabase::uetableindexes::uetablepeople::index_id).tostring(),                                        this->record(iindex).value(ueposdatabase::uetableindexes::uetablepeople::index_name).tostring(),                                        this->record(iindex).value(ueposdatabase::uetableindexes::uetablepeople::index_apppassword).tostring()));     }   //      return users; }   // uefetchusers 

why getting error?

you need tell combobox role use. try adding textrole: "uerolename" combobox.


Comments

Popular posts from this blog

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

html - Outlook 2010 Anchor (url/address/link) -

android - How to create dynamically Fragment pager adapter -