Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. qmlRegisterType sqlquerylmodel (subclass) not show on tableView
Forum Updated to NodeBB v4.3 + New Features

qmlRegisterType sqlquerylmodel (subclass) not show on tableView

Scheduled Pinned Locked Moved Solved QML and Qt Quick
3 Posts 1 Posters 499 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • gfxxG Offline
    gfxxG Offline
    gfxx
    wrote on last edited by gfxx
    #1

    I use these sample for connect my sqlite db with tableview in qml quick 2 .... my ui.qml file import table view in these way:

    import QtQuick 2.3
    import QtQuick.Controls 2.3
    import QtQuick.Controls 1.4 as C
    import QtDataVisualization 1.3
    import QtQuick.LocalStorage 2.0
    import QtQuick.Window 2.10
    
    /* some code */
    
                   C.TableView{
                               id: tableViewXX
    
    
    

    for create sqlmodeldata I subclass it as explained in these wiki (last example) ... so I would to create a qmlregisterType for use it in some ui.qml page with tableView .... is right these or one time that my newSqlModelData1 and newSqlModelData2 I can use it witouth register and import it?

    regards

    bkt

    gfxxG 1 Reply Last reply
    0
    • gfxxG gfxx

      I use these sample for connect my sqlite db with tableview in qml quick 2 .... my ui.qml file import table view in these way:

      import QtQuick 2.3
      import QtQuick.Controls 2.3
      import QtQuick.Controls 1.4 as C
      import QtDataVisualization 1.3
      import QtQuick.LocalStorage 2.0
      import QtQuick.Window 2.10
      
      /* some code */
      
                     C.TableView{
                                 id: tableViewXX
      
      
      

      for create sqlmodeldata I subclass it as explained in these wiki (last example) ... so I would to create a qmlregisterType for use it in some ui.qml page with tableView .... is right these or one time that my newSqlModelData1 and newSqlModelData2 I can use it witouth register and import it?

      regards

      gfxxG Offline
      gfxxG Offline
      gfxx
      wrote on last edited by
      #2

      @gfxx actually I insert my

      model: SqlQueryModel
      

      in my page and print the table in these way :

      import QtQuick 2.3
      import QtQuick.Controls 2.3
      import QtQuick.Controls 1.4 as C
      import QtDataVisualization 1.3
      import QtQuick.LocalStorage 2.0
      import QtQuick.Window 2.10
      import QtSensors 5.9
      import Qt.labs.calendar 1.0
      import QtGraphicalEffects 1.0
      import QtQuick.Controls.Imagine 2.3
      import QtQuick.Extras 1.4
      import QtQuick.XmlListModel 2.0
      import QtQml.Models 2.1
      import QtCharts 2.0
      import QtQuick.Layouts 1.1
      import userRegistry 1.0
      
      /* some code about layout */
      
      
                         C.TableView {
                              id: tableViewUser
                              x: 8
                              y: 8
                              width: 1152
                              height: 675
                              verticalScrollBarPolicy: 2
                              anchors.fill: parent
                              clip: true
      
                              C.TableViewColumn {
                                  title: "User id"
                                  role: "IDuser"
                              }
                              C.TableViewColumn {
                                  title: "Nome"
                                  role: "nome"
                              }
                              C.TableViewColumn {
                                  title: "Cognome"
                                  role: "Cognome"
                              }
                              C.TableViewColumn {
                                  title: "Data di Nascita"
                                  role: "nascita"
                              }
                              C.TableViewColumn {
                                  title: "Comune di Provenienza"
                                  role: "localita"
                              }
      
                              model: SqlQueryModel
      
      
                          }
                      }
      

      where my query if "SELECT * FROM userData" where IDuser, nome, Cognome, nascita and localita is the name of DB table column .... i try to make these query for debug all works ok ... but when I use model in qml file the TableView show empty row and cell ....

      in my main.cpp i use sqlquerymodel subclassed in these way:

          SqlQueryModel *userData = new SqlQueryModel(nullptr);
          userData->setQuery("SELECT * FROM userData");
      
          qmlRegisterType<SqlQueryModel>("userRegistry", 1, 0, "SqlQueryModel");
      

      someone can help me about these ??

      regards

      bkt

      1 Reply Last reply
      0
      • gfxxG Offline
        gfxxG Offline
        gfxx
        wrote on last edited by
        #3

        I answer myself:

        • basically I not know qml quick world ... but the solution is not abstractmodel but the right setting of context.

        so my new main code (working) is these:

        #include <QGuiApplication>
        #include <QQmlApplicationEngine>
        #include <QtQuickControls2>
        #include <QtSql>
        #include <QtGui/QGuiApplication>
        #include <QtCore/QDir>
        #include <QtQuick/QQuickView>
        #include <QtQml/QQmlEngine>
        #include <QtQml/qqml.h>
        #include "shared/shared.h"
        #include <QtCharts>
        #include <QtDataVisualization>
        #include <QAbstractTableModel>
        #include <QtMessageHandler>
        #include <QMessageBox>
        #include <QMessageLogContext>
        #include <QMessageLogger>
        #include <QDebug>
        #include <QQmlEngine>
        #include "sqlquerymodel.h"
        
        
        using namespace QtCharts;
        
        int main(int argc, char *argv[])
        {
            QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
        
           QGuiApplication app(argc, argv);
        
            QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
            db.setDatabaseName("/home/pc/Qt/TestApp/DataBase/TestAnalyticsDB");
            if(db.open()) {//{ QMessageBox::information(nullptr,"Ok","Connection ok");
                qDebug() << "connessione ok";
            }
            else qDebug() << "connessione FALLITA";//QMessageBox::information(nullptr,"Error","some error.");
        
        
            SqlQueryModel *UserRegistry = new SqlQueryModel(nullptr);
            UserRegistry->setQuery("SELECT * FROM userData");
            SqlQueryModel *AdmRegistry = new SqlQueryModel(nullptr);
            AdmRegistry->setQuery("SELECT * FROM admData");
        
        
            QQmlApplicationEngine engine;
            engine.rootContext()->setContextProperty("userModel", UserRegistry);  /* the trick */
            engine.rootContext()->setContextProperty("admModel", AdmRegistry);  /* second query table model */
            engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
            if (engine.rootObjects().isEmpty())
                return -1;
        
        
            return app.exec();
        }
        

        after these in ui.qml part in tableView section is simple to write these :

        import QtQuick 2.3
        import QtQuick.Controls 2.3
        import QtQuick.Controls 1.4 as C
        
        /*some code*/
         C.TableView {
                                id: tableViewUser
                                x: 8
                                y: 8
                                width: 1152
                                height: 244
                                anchors.right: parent.right
                                anchors.left: parent.left
                                anchors.top: parent.top
                                verticalScrollBarPolicy: 2
                                clip: true
        
                                model: userModel     /* the trick */
        
                                C.TableViewColumn {
                                    title: "User id"
                                    role: "IDuser"
                                    width: title.length * 10
                                    visible: true
                                }
        
        /* other column*/
        /* second table*/
        
                            C.TableView {
                                id: tableViewData
                                x: 0
                                y: 250
                                width: 1168
                                height: 433
                                anchors.right: parent.right
                                anchors.left: parent.left
                                anchors.top: parent.bottom
                                verticalScrollBarPolicy: 2
                                clip: true
        
                                model: admModel   /* second query table model */
        
                                C.TableViewColumn {
                                    title: "Sensore 1"
                                    role: "sens1"
                                    width: title.length * 15
                                }
        

        with SqlQueryModel class i symple to show every type of query in a table (in these case in quick 1.4 near to 2.3 control, but I think is the same with new TableView in Qt5.12).

        regards

        bkt

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved