Здравствуйте, гость ( Вход | Регистрация )
JohnZ | Дата 14.7.2017, 12:50 |
Помнишь фильм "Напарник" Л.Гайдая ? - Руки ... мыли ? - Ах да да да ... Thx ! |
|
lanz | Дата 14.7.2017, 12:41 |
Было ИТТ, ну!
http://doc.qt.io/qt-4.8/qscriptengine.html#newVariant |
|
JohnZ | Дата 14.7.2017, 12:24 |
Lanz, а не подскажешь как можно передать в скриптовую ф-цию QVariant ?
На последнюю строчку ругань компиллера. Это что-бы отказаться от callback-а sdata(). По-идее все переменные в скрипте QVariant и должны-бы восприниматься как "родные" в качестве параметра, но к сожалению нет такого конструктора у QScriptValue ... Можно-ли как-ни-ить это обойти ? |
|
lanz | Дата 9.7.2017, 23:56 |
А так можно ? Работает? Можно о имея в проекте всего одну универсальную модель, как можно по-другому подменить колонку ? Иметь много разных проксей для каждого нужного случая И надевать нужную(ые) для каждого конкретного случая. |
|
JohnZ | Дата 9.7.2017, 19:56 |
Цитата(JohnZ @ 7.7.2017, 17:34) но отказался с ним работать Ну смотря что ты хочешь, т.к. это не QObject, то он не маппится в JS, можно его либо как черный ящик передавать (как у меня), либо разваливать на нужные компоненты. А так можно ? Раскрывающийся текст QVariant fpTableModel::sdata(int row, int col) const { QModelIndex index = createIndex(row, col); return QSqlTableModel::data(index, Qt::DisplayRole); } Это та ф-ция из которой скрипт будет напрямую из парента брать данные ... Цитата Цитата(JohnZ @ 7.7.2017, 17:34) sourceModel() - это моя модель или парента ? Ведь нужна-то парентовая !!! Все примеры относятся к проекту, который я выкладывал. Т.е. sourceModel это произвольная модель, которая лежит под этой проксей. Что такое парентовая модель я не очень понимаю. В моём случае (выше) для fpTableModel парент это QT-шная QSqlTableModel. Может я неправильно выразился, но подразумевалось именно это. Цитата Цитата(JohnZ @ 7.7.2017, 17:34) Надо что-бы "на глаз" ( как в анекдоте про волка ) работало быстро и юзер "не уставал" ждать ... С таким подходом ты можешь оптимизировать вовсе не то что тормозит, например сишный вызов почти ничего не стоит по сравнению с вызовом скрипта, поэтому ты тут зря экономишь. Профилируй, если тормозит и смотри где у тебя узкое место. Lanz, я тоже за то, чтобы было в С-щном коде, но имея в проекте всего одну универсальную модель, как можно по-другому подменить колонку ? Только через скрипт imho ... Вот эту задачу тут мы и решали. |
|
lanz | Дата 7.7.2017, 18:36 |
У тебя либо 5.XX ... либо 3.XX 5.5 но отказался с ним работать Ну смотря что ты хочешь, т.к. это не QObject, то он не маппится в JS, можно его либо как черный ящик передавать (как у меня), либо разваливать на нужные компоненты. sourceModel() - это моя модель или парента ? Ведь нужна-то парентовая !!! Все примеры относятся к проекту, который я выкладывал. Т.е. sourceModel это произвольная модель, которая лежит под этой проксей. Что такое парентовая модель я не очень понимаю. Надо что-бы "на глаз" ( как в анекдоте про волка ) работало быстро и юзер "не уставал" ждать ... С таким подходом ты можешь оптимизировать вовсе не то что тормозит, например сишный вызов почти ничего не стоит по сравнению с вызовом скрипта, поэтому ты тут зря экономишь. Профилируй, если тормозит и смотри где у тебя узкое место. |
|
JohnZ | Дата 7.7.2017, 17:34 |
Погодь lanz, не убегай А какая у тебя QT-я ? У мну 4.8.2 и мой qmake не понял QT += widgets Пробовал заменить на core & gui - не помогло ... У тебя либо 5.XX ... либо 3.XX Цитата(JohnZ @ 7.7.2017, 11:27) И как в параметрах передать QModelIndex ? Ведь скрипт его не понимает... Все он понимает engine.evaluate("function data(model, index) { return model.data(index); }"); Я ранее такое пробовал - не прокатило, вернее в скриптовом отладчике показало что это объект класа QModelIndex, но отказался с ним работать Попробую по твоему - расскажу ... Цитата args << engine->newQObject(sourceModel()) << engine->newVariant(index); sourceModel() - это моя модель или парента ? Ведь нужна-то парентовая !!! Цитата Цитата(JohnZ @ 7.7.2017, 11:27) потеря скорости ... А бенчмарки у тебя есть? Нет бенчмарков, нет проблемы Надо что-бы "на глаз" ( как в анекдоте про волка ) работало быстро и юзер "не уставал" ждать ... Спокойный юзер - Это самая лучшая бенчмарка |
|
lanz | Дата 7.7.2017, 13:49 |
И как в параметрах передать QModelIndex ? Ведь скрипт его не понимает... Все он понимает
потеря скорости ... А бенчмарки у тебя есть? Нет бенчмарков, нет проблемы А в конструкторе обнулить указатель на callback_ надо ? Не надо, оставь default initialization. http://doc.qt.io/qt-4.8/qscriptvalue.html#QScriptValue |
|
JohnZ | Дата 7.7.2017, 11:27 |
Вот уже почти и добрались до решения проблемы Цитата(JohnZ @ 6.7.2017, 14:25) Дык теперь модель можно отдать в скрипт ? Только пока надо придмать как, ведь в JS нет указателей ... newQObject(model_ptr) а потом использовать как любое другое QScriptValue Как оказалось, нужен доступ из скрипта не к всей модели, а достаточно (и необходимо !) иметь доступ к data парента, т.е. к QSqlQueryModel::data(index, role), что-бы вытащить оригинальные значения из модели и сформировать нужную колонку. И как в параметрах передать QModelIndex ? Ведь скрипт его не понимает... Или отдавать row и col раздельно ? (как вариант) Как скриптовая data могла-бы вызвать QSqlQueryModel::data(index, role) ? В данном случае data в скрипте примерно такая Раскрывающийся текст function data2101(index) { var d[5], i, n;; // Заполняем массив оригинальными данными for(i = 0;i < 5;i++) d[i] = QSqlQueryModel::data((index + i), role); // Это псевдо-код !!! (index + i) это колонка var param = ""; for (i = 4;i >= 0;i--) // ищем с конца первый ненулевой { if (d[i] != 0.0) { n = i + 1; for (i = 0;i < n;i++) // формируем колонку { param += d[i].toString(); param += " "; } break; } } return(param); } У меня конечно-же есть решение, но может ты чё лучше подскажешь ? У меня решение через UserRole вызывать оригинальную QSqlQueryModel::data из fpQueryModel::data. Слишком "длинно" получится, потеря скорости ... Или из другой ф-ции вызывать, scriptData например, кторая всегда возвращает оригинал. Цитата Там где я прикладывал есть несколько вариантов. Посмотрел ес-сно. Спс. А в конструкторе обнулить указатель на callback_ надо ? |
|
lanz | Дата 6.7.2017, 17:20 |
Дык теперь модель можно отдать в скрипт ? Только пока надо придмать как, ведь в JS нет указателей ... newQObject(model_ptr) а потом использовать как любое другое QScriptValue Там где я прикладывал есть несколько вариантов. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 28.3.2024, 20:42 |