crossplatform.ru

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

> data() MVC из скрипта возможно ?, Прицепить data() MVC к скрипту !?
JohnZ
  опции профиля:
сообщение 3.7.2017, 17:30
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Со старта прошу не пинать за то что ( возможно !) не в том разделе задаю вопрос, т.к. вероятнее всего это из раздела MVC.

Задача следующая, - есть класс формы с указателем на её модельку ...
Раскрывающийся текст

class fpTForma : public QDialog
{
Q_OBJECT

public:

Q_INVOKABLE fpTForma(int id, MainWindow *parent = 0, Qt::WindowFlags f = 0);
~fpTForma();

public slots:

Q_INVOKABLE bool initForm(int fpCmd = 0);
Q_INVOKABLE MainWindow *getParent() { return mParent; }
Q_INVOKABLE int getCurRow() { return curIndex.isValid() ? curIndex.row() : -1; }
Q_INVOKABLE QVariant getCurValue(int col);
Q_INVOKABLE QVariant getCurValue(const QString & name);
Q_INVOKABLE bool match(int col, QVariant value);
Q_INVOKABLE bool match2(int col, int col1, QVariant value, QVariant value1);
Q_INVOKABLE void refresh() { model->select(); }
Q_INVOKABLE void setSort(int colnum, int order, bool sel = false);
Q_INVOKABLE int exec();

// .... etc

protected slots:

void closeEvent(QCloseEvent *event);
void keyPressEvent (QKeyEvent *event);
void setCurrentModelIndex(const QModelIndex &idx);

// .... etc

protected:

QScriptEngine *engine; // ссылка на интерпретатор скрипта.
MainWindow *mParent;
QTableView *viewChild; // QTableView на этой форме

fpTableModel *model; // Форма работает с Таблицей !!!

QModelIndex curIndex;
QSqlRecord curRecord;
QDataWidgetMapper *dataMapper;

// .... etc
};


Он фактически выполняет роль Контроллера в MVC. В скрипте эти объекты видны как frmXXX.
Задача состоит в том, что-бы из скрипта "прицепить" к его модели ф-цию data() для подмены колонок в View !?
Вроде-бы когда-то видел такое в и-нете, но не уверен. Возможно-ли такое сделать ? Подскажите PLZ ...

Сообщение отредактировал JohnZ - 3.7.2017, 17:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
JohnZ
  опции профиля:
сообщение 7.7.2017, 11:27
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Вот уже почти и добрались до решения проблемы :)
Цитата(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_ надо ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- JohnZ   data() MVC из скрипта возможно ?   3.7.2017, 17:30
- - lanz   Плюсовые объекты из скрипта менять не получится км...   3.7.2017, 18:39
- - JohnZ   Цитата(lanz @ 3.7.2017, 18:39) Плюсовые о...   4.7.2017, 11:36
- - lanz   Цитата(JohnZ @ 4.7.2017, 11:36) А сама fp...   4.7.2017, 12:17
- - JohnZ   Цитата(lanz @ 4.7.2017, 12:17) Цитата(Joh...   4.7.2017, 13:35
- - lanz   См. приложение. ЦитатаДык по-любому все объекты по...   5.7.2017, 11:09
- - JohnZ   Цитата(lanz @ 5.7.2017, 11:09) См. прилож...   5.7.2017, 15:07
- - lanz   Цитата(JohnZ @ 5.7.2017, 15:07) ... или з...   5.7.2017, 17:18
- - JohnZ   Цитата(lanz @ 5.7.2017, 17:18) Цитата(Joh...   5.7.2017, 22:15
- - lanz   Цитата(JohnZ @ 5.7.2017, 22:15) Если снят...   6.7.2017, 9:21
- - JohnZ   Цитата(lanz @ 6.7.2017, 9:21) Цитата(John...   6.7.2017, 12:06
- - lanz   Цитата(JohnZ @ 6.7.2017, 12:06) Это уже п...   6.7.2017, 13:16
- - JohnZ   Цитата(lanz @ 6.7.2017, 13:16) Цитата(Joh...   6.7.2017, 14:25
- - lanz   Цитата(JohnZ @ 6.7.2017, 14:25) Дык тепер...   6.7.2017, 17:20
- - JohnZ   Вот уже почти и добрались до решения проблемы Ц...   7.7.2017, 11:27
- - lanz   Цитата(JohnZ @ 7.7.2017, 11:27) И как в п...   7.7.2017, 13:49
- - JohnZ   Погодь lanz, не убегай А какая у тебя QT-я ? У мн...   7.7.2017, 17:34
- - lanz   Цитата(JohnZ @ 7.7.2017, 17:34) У тебя ли...   7.7.2017, 18:36
- - JohnZ   Цитата(lanz @ 7.7.2017, 18:36) Цитата(Joh...   9.7.2017, 19:56
- - lanz   Цитата(JohnZ @ 9.7.2017, 19:56) А так мож...   9.7.2017, 23:56
- - JohnZ   Lanz, а не подскажешь как можно передать в скрипто...   14.7.2017, 12:24
- - lanz   Было ИТТ, ну! engine->newVariant(inde...   14.7.2017, 12:41
- - JohnZ   Помнишь фильм "Напарник" Л.Гайдая ? - Р...   14.7.2017, 12:50


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.4.2024, 18:29