![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
JohnZ |
![]() ![]()
Сообщение
#1
|
Участник ![]() ![]() Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: ![]() ![]() ![]() |
Со старта прошу не пинать за то что ( возможно !) не в том разделе задаю вопрос, т.к. вероятнее всего это из раздела 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 |
![]()
Сообщение
#2
|
Участник ![]() ![]() Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: ![]() ![]() ![]() |
См. приложение. БлагоДарю !!! Цитата Вот если-бы они "росли" Prefer composition to inheritance Sorry, не понялЪ про composition ... ![]() ... или здесь подразумевается множеств-ное наследование ? Цитата Дык какая колонка чего должна показать и должна "разобраться" data() !? ... или я тебя не правильно понял :-( В ScripProxy можно завести другие проперти, которые позволят фильтровать уже в ScripProxy::data, не дергая скрипт, например если скрипт умеет обрабатывать только 1 колонку, то можно для остальных и не вызывать коллбэк. О том что "скрипт умеет обрабатывать только 1 колонку" нужно выставить _предопределённые_ признаки в пропертях и опрашивать их из С-шного кода в проксе ? Цитата Тот же пример что выше - if по номеру колонки можно сделать в скрипте, тогда скрипт будет вызываться для всех колонок. А можно сделать в ScriptProxy::data и сравнивать с вынесенным property. Тогда скрипт будет вызываться только для одной колонки. Так точно ! Именно этот случай, - в БД "лежат" 5 double, параметры для тех-самых ф-ций расчёта с динамич-м именем в переменной ![]() будет от нулей ![]() ![]() Цитата Вроде того: function data(row, col, model) { return model.data() } args << engine->newQObject(sourceModel()) А как СВОЮ модель "объяснить" скрипту ? Сколько я ни пытался, не получилось ![]() Он хочет видеть QOject, а у меня в модели его нет, а оборачивать всю(е) модель(и) в QOject гиморно ... ![]() |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 21:50 |