Виталий Антипов
Виталий АнтиповJan. 22, 2018, 7:53 p.m.

256 строк в модели данных

Здравствуйте! У меня задача отправить данные из sqlite базы в Bars3D. Для этого, по вашим урокам, подготавливаю модель и роли в с++ и отправляю в qml ItemModelBarDataProxy. Все хорошо, когда количество строк меньше 256, но когда больше - на 3D графике только первые 256. console.log(model.rowCount()) = 256, хотя реально 342. Подскажите, как можно выкрутиться из этой ситуации?

listmodel.cpp
ListModel1V::ListModel1V(QObject *parent) :
    QSqlQueryModel(parent)
{
    this->updateModel();
}

// Метод для получения данных из модели
QVariant ListModel1V::data(const QModelIndex & index, int role) const {

    // Определяем номер колонки, адрес так сказать, по номеру роли
    int columnId = role - Qt::UserRole - 1;
    // Создаём индекс с помощью новоиспечённого ID колонки
    QModelIndex modelIndex = this->index(index.row(), columnId);

    /* И с помощью уже метода data() базового класса
     * вытаскиваем данные для таблицы из модели
     * */
    return QSqlQueryModel::data(modelIndex, Qt::DisplayRole);
}

// Метод для получения имен ролей через хешированную таблицу.
QHash<int, QByteArray> ListModel1V::roleNames() const {
    /* То есть сохраняем в хеш-таблицу названия ролей
     * по их номеру
     * */
    QHash<int, QByteArray> roles;
    roles[IdRole] = "id";
    roles[bazaizm_1vRole] = "bazaizm1v";
    roles[bazaizm_dataRole] = "bazaizmdata";
    roles[bazaizm_naprRole] = "bazaizmnapr";
    return roles;
}

// Метод обновления таблицы в модели представления данных
void ListModel1V::updateModel()
{
    QObject* stack = this->parent()->findChild<QObject*>("stackView");
    QString kks_id=(stack->property("baza_id")).toString();
    QString rezhim_id=(stack->property("rezhim_id")).toString();
    QString rezhim_filter = " and BazaIzmereni.id_Rezhim = " + rezhim_id;

    if(rezhim_id == ""){
        rezhim_filter = "";
    }
    qDebug() << rezhim_id;
    QSqlQuery query1V;
    QString select1V = QString ("SELECT COUNT(BazaIzmereni.id) FROM BazaIzmereni WHERE BazaIzmereni.id_Baza = " + kks_id + " and BazaIzmereni.'1В' is not null" + rezhim_filter);
    if (!query1V.exec(select1V)){
        qDebug() << "ошибка: " << query1V.lastError().text();
    }
            query1V.next();
    if(query1V.value(0)==0){
        select1V = "";
    } else {
        select1V = " SELECT BazaIzmereni.id, IFNULL(BazaIzmereni.'1В', 0), strftime('%d-%m-%Y', Дата)||' '||IFNULL(BazaIzmereni.'Время', 0), '1В', BazaIzmereni.Дата, BazaIzmereni.'Время' FROM BazaIzmereni WHERE BazaIzmereni.id_Baza = " + kks_id + rezhim_filter;
    };
    QSqlQuery query1P;
    QString select1P = QString ("SELECT COUNT(BazaIzmereni.id) FROM BazaIzmereni WHERE BazaIzmereni.id_Baza = " + kks_id + " and BazaIzmereni.'1П' is not null" + rezhim_filter);
        if (!query1P.exec(select1P))
        qDebug() << "error: " << query1P.lastError().text();
            query1P.next();
    if(query1P.value(0)==0){
        select1P = "";
    } else {
        select1P = " UNION ALL SELECT BazaIzmereni.id, IFNULL(BazaIzmereni.'1П', 0), strftime('%d-%m-%Y', Дата)||' '||IFNULL(BazaIzmereni.'Время', 0), '1П', BazaIzmereni.Дата, BazaIzmereni.'Время' FROM BazaIzmereni WHERE BazaIzmereni.id_Baza = " + kks_id + rezhim_filter;
    };
    //...............................здесь однотипный код............................................
    QSqlQuery query8O;
    QString select8O = QString ("SELECT COUNT(BazaIzmereni.id) FROM BazaIzmereni WHERE BazaIzmereni.id_Baza = " + kks_id + " and BazaIzmereni.'8О' is not null" + rezhim_filter);
        if (!query8O.exec(select8O))
        qDebug() << "error: " << query8O.lastError().text();
            query8O.next();
    if(query8O.value(0)==0){
        select8O = "";
    } else {
        select8O = " UNION ALL SELECT BazaIzmereni.id, IFNULL(BazaIzmereni.'8О', 0), strftime('%d-%m-%Y', Дата)||' '||IFNULL(BazaIzmereni.'Время', 0), '8О', BazaIzmereni.Дата, BazaIzmereni.'Время' FROM BazaIzmereni WHERE BazaIzmereni.id_Baza = " + kks_id + rezhim_filter;
    };
    //Обновление производится SQL-запросом к базе данных
    this->setQuery(select1V + select1P + select1O + select2V + select2P + select2O + select3V + select3P + select3O + select4V + select4P + select4O + select5V + select5P + select5O + select6V + select6P + select6O + select7V + select7P + select7O + select8V + select8P + select8O + " order by 5 asc, 6 asc");
}

// Получение id из строки в модели представления данных
int ListModel1V::getId(int row)
{
    return this->data(this->index(row, 0), IdRole).toInt();
}
OpenBO.qml
ColorGradient {
                        id: surfaceGradient
                        ColorGradientStop { id: startGradient; position: 0.0; color: "green" }
                        ColorGradientStop { id: middleGradient; position: 0.75; color: "yellow" }
                        ColorGradientStop { id: finishGradient; position: 1.0; color: "red" }
                    }
                    Bars3D {
                        id: barGraph
                        Material.theme: Material.Light
                        anchors.fill: parent
                        barThickness: 2
                        antialiasing: true
                        reflection: true
                        theme: Theme3D {
                            type: Theme3D.ThemeQt
                            font.family: "STCaiyun"
                            font.pointSize: 25
                            colorStyle: Theme3D.ColorStyleRangeGradient
                            baseGradients: [surfaceGradient]
                            windowColor: "white"
                            labelBackgroundEnabled: false
                            backgroundEnabled: true
                            backgroundColor: "transparent"
                            gridEnabled: true
                            gridLineColor: "black"
                            labelTextColor: "blue"
                            multiHighlightColor: "red"
                            singleHighlightColor: "white"
                        }
                        selectionMode: AbstractGraph3D.SelectionItemAndRow | AbstractGraph3D.SelectionSlice
                        scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
                        Bar3DSeries {
                            id: station1
                            name: "Station 1"
                            ItemModelBarDataProxy {
                                id: proxy
                                itemModel: model_1V
                                rowRole: "bazaizmnapr"
                                columnRole: "bazaizmdata"
                                valueRole: "bazaizm1v"
                            }
                            onSelectedBarChanged: {
                                rec_prim_izmer.visible = true
                                list1.currentIndex = list1.count -1 - parseInt([position.y])
                                newindex = list1.currentIndex
                                item4.editEntry(newindex)
                                barGraph.selectionMode = AbstractGraph3D.SelectionItemAndRow | AbstractGraph3D.SelectionSlice
                                console.log(list1.currentIndex)
                            }
                        }
                        Component.onCompleted: {
                            console.log(model_1V.rowCount()) //qml: 256                            
                            }
                        }
                }
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

2
Виталий Антипов
  • Jan. 22, 2018, 8:41 p.m.
  • The answer was marked as a solution.

Извиняюсь, нашел ответ тут http://www.qtcentre.org/threads/54533-QSqlQueryModel-%E2%80%98s-method-rowcount()-return-256

if(this->canFetchMore()){
        this->fetchMore();
    }
Проблема вроде решена.
    Виталий Антипов
    • Jan. 26, 2018, 1:53 p.m.

    Внесу дополнение. Правильнее заменить if на while:

    while(this->canFetchMore()){
            this->fetchMore();
        }
    иначе получим ограничение в 512 строк, а qDebug()<<this->canFetchMore(); останется true при количестве строк >512.

      Comments

      Only authorized users can post comments.
      Please, Log in or Sign up
      AD

      C ++ - Test 004. Pointers, Arrays and Loops

      • Result:50points,
      • Rating points-4
      m

      C ++ - Test 004. Pointers, Arrays and Loops

      • Result:80points,
      • Rating points4
      m

      C ++ - Test 004. Pointers, Arrays and Loops

      • Result:20points,
      • Rating points-10
      Last comments
      ИМ
      Игорь МаксимовNov. 22, 2024, 7:51 p.m.
      Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
      Evgenii Legotckoi
      Evgenii LegotckoiOct. 31, 2024, 9:37 p.m.
      Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
      A
      ALO1ZEOct. 19, 2024, 3:19 p.m.
      Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
      ИМ
      Игорь МаксимовOct. 5, 2024, 2:51 p.m.
      Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
      d
      dblas5July 5, 2024, 6:02 p.m.
      QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
      Now discuss on the forum
      m
      moogoNov. 22, 2024, 3:17 p.m.
      Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
      Evgenii Legotckoi
      Evgenii LegotckoiJune 24, 2024, 10:11 p.m.
      добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
      t
      tonypeachey1Nov. 15, 2024, 2:04 p.m.
      google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
      NSProject
      NSProjectJune 4, 2022, 10:49 a.m.
      Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

      Follow us in social networks