Название: Использование Сustom Widgets в JS Отправлено: vladmailbox от Марта 02, 2010, 14:51 Ситуация такая. Есть Сustom Widget
class DbTableView : public QTableView { Q_OBJECT public: DbTableView( QWidget *parent = 0 ); Q_INVOKABLE void setHeader( QString text ); } Создается форма и на нее выкладывается этот виджет, путем ручного редактирования xml. Далее есть скрипт, типа: function City(ui) { this.ui = ui; with (ui) { ... dbg.setHeader( "Код|Наименование..." ); dbg.Display( true ); } }; В коде, сперва грузится форма: QFile uiFile(FormName ); uiFile.open(QIODevice::ReadOnly); ui = loader.load(&uiFile, this); uiFile.close(); Затем запускается скрипт: ... QFile scriptFile(ScriptName); scriptFile.open(QIODevice::ReadOnly); engine.evaluate(scriptFile.readAll(), scriptFile.fileName()); scriptFile.close(); ... QScriptValue ctor = engine.evaluate(ClassName); QScriptValue scriptUi = engine.newQObject(ui, QScriptEngine::AutoOwnership); QScriptValue calc = ctor.construct(QScriptValueList() << scriptUi); При этом все стандартные виджеты видны из скрипта и работают. Но методы DbTableView не видны. Видимо его надо где-то еще регистрировать, или как-то иначе оформить. Подскажите кто знает. Название: Re: Использование Сustom Widgets в JS Отправлено: alexman от Марта 02, 2010, 17:58 А почему бы при создании формы в Qt Designer не сделать promoteTo данному виджету? Тогда не нужно будет руками редактировать!
Название: Re: Использование Сustom Widgets в JS Отправлено: vladmailbox от Марта 02, 2010, 18:04 А что это значит? Как это сделать?
Название: Re: Использование Сustom Widgets в JS Отправлено: alexman от Марта 02, 2010, 18:15 На форму кидаешь виджет и делаешь promoteTo по правой кнопке мыши на этом виджете... посмотри Qt Assistant!
Название: Re: Использование Сustom Widgets в JS Отправлено: vladmailbox от Марта 02, 2010, 18:38 Да, спасибо, я с этим разобрался. Но не помогло.
Название: Re: Использование Сustom Widgets в JS Отправлено: asvil от Марта 04, 2010, 09:01 Код: Q_SCRIPT_DECLARE_QMETAOBJECT(FancyLineEdit, QWidget*); Затем где-либо в коде инициализирующем приложение: Код: qScriptRegisterMetaTypeEx<FancyLineEdit*>(engine); Вместо FancyLineEdit, свой виджет. Вышесказанное подходит только для qobject. |