crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в data() MVC из скрипта возможно ?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
JohnZ Дата 14.7.2017, 12:50
  Помнишь фильм "Напарник" Л.Гайдая ?

- Руки ... мыли ?
- Ах да да да ... :)

Thx !
lanz Дата 14.7.2017, 12:41
  Было ИТТ, ну! :lol:
engine->newVariant(index);

http://doc.qt.io/qt-4.8/qscriptengine.html#newVariant
JohnZ Дата 14.7.2017, 12:24
  Lanz, а не подскажешь как можно передать в скриптовую ф-цию QVariant ?

        QScriptValueList args;
        args << QScriptValue(index.row()) << QScriptValue(index.column())
                << QScriptValue(QSqlQueryModel::data(index, Qt::DisplayRole));

На последнюю строчку ругань компиллера. Это что-бы отказаться от callback-а sdata().
По-идее все переменные в скрипте QVariant и должны-бы восприниматься как "родные" в качестве параметра,
но к сожалению нет такого конструктора у QScriptValue ... :blink:
Можно-ли как-ни-ить это обойти ?
lanz Дата 9.7.2017, 23:56
 
Цитата(JohnZ @ 9.7.2017, 19:56) *
А так можно ?

Работает? Можно :)
Цитата(JohnZ @ 9.7.2017, 19:56) *
о имея в проекте всего одну универсальную модель, как можно по-другому
подменить колонку ?

Иметь много разных проксей для каждого нужного случая :) И надевать нужную(ые) для каждого конкретного случая.
JohnZ Дата 9.7.2017, 19:56
 
Цитата(lanz @ 7.7.2017, 18:36) *
Цитата(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.
Может я неправильно выразился, но подразумевалось именно это. :unsure:

Цитата
Цитата(JohnZ @ 7.7.2017, 17:34)
Надо что-бы "на глаз" ( как в анекдоте про волка ) работало быстро и юзер "не уставал" ждать ...
С таким подходом ты можешь оптимизировать вовсе не то что тормозит, например сишный вызов почти ничего не стоит по сравнению с вызовом скрипта, поэтому ты тут зря экономишь. Профилируй, если тормозит и смотри где у тебя узкое место.

Lanz, я тоже за то, чтобы было в С-щном коде, но имея в проекте всего одну универсальную модель, как можно по-другому
подменить колонку ? Только через скрипт imho ... Вот эту задачу тут мы и решали.
lanz Дата 7.7.2017, 18:36
 
Цитата(JohnZ @ 7.7.2017, 17:34) *
У тебя либо 5.XX ... либо 3.XX :)

5.5
Цитата(JohnZ @ 7.7.2017, 17:34) *
но отказался с ним работать

Ну смотря что ты хочешь, т.к. это не QObject, то он не маппится в JS, можно его либо как черный ящик передавать (как у меня), либо разваливать на нужные компоненты.
Цитата(JohnZ @ 7.7.2017, 17:34) *
sourceModel() - это моя модель или парента ? Ведь нужна-то парентовая !!!

Все примеры относятся к проекту, который я выкладывал. Т.е. sourceModel это произвольная модель, которая лежит под этой проксей. Что такое парентовая модель я не очень понимаю.
Цитата(JohnZ @ 7.7.2017, 17:34) *
Надо что-бы "на глаз" ( как в анекдоте про волка ) работало быстро и юзер "не уставал" ждать ...

С таким подходом ты можешь оптимизировать вовсе не то что тормозит, например сишный вызов почти ничего не стоит по сравнению с вызовом скрипта, поэтому ты тут зря экономишь. Профилируй, если тормозит и смотри где у тебя узкое место.
JohnZ Дата 7.7.2017, 17:34
  Погодь lanz, не убегай :)
А какая у тебя QT-я ? У мну 4.8.2 и мой qmake не понял QT += widgets
Пробовал заменить на core & gui - не помогло ...
У тебя либо 5.XX ... либо 3.XX :)

Цитата(lanz @ 7.7.2017, 13:49) *
Цитата(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
 
Цитата(JohnZ @ 7.7.2017, 11:27) *
И как в параметрах передать QModelIndex ? Ведь скрипт его не понимает...

Все он понимает :)
engine.evaluate("function data(model, index) { return model.data(index); }");

args << engine->newQObject(sourceModel()) << engine->newVariant(index);

Цитата(JohnZ @ 7.7.2017, 11:27) *
потеря скорости ... :mellow:

А бенчмарки у тебя есть? Нет бенчмарков, нет проблемы :lol:
Цитата(JohnZ @ 7.7.2017, 11:27) *
А в конструкторе обнулить указатель на callback_ надо ?

Не надо, оставь default initialization.
http://doc.qt.io/qt-4.8/qscriptvalue.html#QScriptValue
JohnZ Дата 7.7.2017, 11:27
  Вот уже почти и добрались до решения проблемы :)
Цитата(lanz @ 6.7.2017, 17:20) *
Цитата(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);
}

У меня конечно-же есть решение, но может ты чё лучше подскажешь ? :unsure:
У меня решение через UserRole вызывать оригинальную QSqlQueryModel::data
из fpQueryModel::data. Слишком "длинно" получится, потеря скорости ... :mellow:
Или из другой ф-ции вызывать, scriptData например, кторая всегда возвращает оригинал.

Цитата
Там где я прикладывал есть несколько вариантов.

Посмотрел ес-сно. Спс.
А в конструкторе обнулить указатель на callback_ надо ?
lanz Дата 6.7.2017, 17:20
 
Цитата(JohnZ @ 6.7.2017, 14:25) *
Дык теперь модель можно отдать в скрипт ?
Только пока надо придмать как, ведь в JS нет указателей ...

newQObject(model_ptr)
а потом использовать как любое другое QScriptValue


Там где я прикладывал есть несколько вариантов.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.2.2021, 1:23