Название: emit сигнала Отправлено: Авварон от Март 17, 2011, 00:26 Нормально ли эмитить сигнал void keyChanged(const QString &key); _до_ смены значения key?:
Код: void Edition::setKey(const QString &key) Название: Re: emit сигнала Отправлено: asvil от Март 17, 2011, 00:40 void keyChanged(old, new)?
Postscriptum: void keyChanged(new, old)? Можно приконнектить однопараметровый слот. Название: Re: emit сигнала Отправлено: Пантер от Март 17, 2011, 00:42 А если keyChanged(const QString &oldKey, const QString &newKey)?
Опередил. :) Название: Re: emit сигнала Отправлено: Авварон от Март 17, 2011, 00:44 а со скриптами оно будет дружить? там в NOTIFY секцию не однопараметровый ли сигнал надо?
Так бы и сделал бы, просто скриптовость останавливает Название: Re: emit сигнала Отправлено: Пантер от Март 17, 2011, 00:45 Ну, а ежели 2 сигнала?
Название: Re: emit сигнала Отправлено: Авварон от Март 17, 2011, 00:51 А это уже криво) Имплементация торчит наружу. в принципе там скорость не критична. А можно и обратную мапу забабахать. Однако ж интересны мнения, как написать "красиво".
Название: Re: emit сигнала Отправлено: asvil от Март 17, 2011, 00:52 Две проперти?
Название: Re: emit сигнала Отправлено: Авварон от Март 17, 2011, 00:56 Оригинально:) Но тоже криво. Что 2й сигнал, что 2я пропертя бесполезны всему остальному приложению, они нужны только 2му классу (пусть будет в дальнейшем Base), к-ый содержит мапу.
Название: Re: emit сигнала Отправлено: asvil от Март 17, 2011, 01:16 Немного не в тему, но мощно. Звучит примерно так:
Каждый QObject-based класс должен реализовывать сигнал propertyChanged(propertyName, newValue, oldValue). Ради одного класса лучше пренебречь красотой. Или патчик moc. Название: Re: emit сигнала Отправлено: _govorilka от Март 17, 2011, 08:13 Ты можешь посылать в сигнале структуру. Тогда если тебе понадобиться еще один параметр, ты просто добавишь поле в эту структуру и тебе не придется переделывать сигнал. Если под скриптами - подразумеваешь QScript, то добавить структуру в скрипт не сложно (в библиотеки есть соотвествующие примеры).
Название: Re: emit сигнала Отправлено: Авварон от Март 17, 2011, 12:06 Не, меня декларатив интересует. Это там ограничение на сигнатуру кажется присутствует. В кьютскрипт любой сигнал можно подцепить.
Название: Re: emit сигнала Отправлено: Mikhail от Март 17, 2011, 20:07 Скрипты могут получать сигналы более чем с одним параметром.
Главное создать в скрипте слот с требуемым числом параметров. Проверено на опыте. Работает Название: Re: emit сигнала Отправлено: Авварон от Март 17, 2011, 20:59 вы про qml?
Название: Re: emit сигнала Отправлено: Sahab от Март 18, 2011, 10:37 Цитировать http://www.anyqsoft.com <offtop>the sexadecimal editor written completely on Qt</offtop>Название: Re: emit сигнала Отправлено: twp от Март 18, 2011, 13:20 если я правильно понял, был установлен кастом виджет в QML сцену через QGraphicsProxyWidget и регистрацию QML_DECLARE_TYPE. Тогда можно не использовать стандартный сигнал в секции NOTIFY декларации Q_PROPERTY (но можно и оставить как сигнал для стандартной реализации) и добавить сигнал с двумя параметрами как было предложено выше. В QML-коде его можно перехватить как обычный сигнал на изменение проперти
Название: Re: emit сигнала Отправлено: Mikhail от Март 18, 2011, 15:20 вы про qml? Нет я именно про скрипты. Ведь qml это не скрипты. Название: Re: emit сигнала Отправлено: Авварон от Март 19, 2011, 00:01 ну а вот в qml это работать по идее не будет.
Название: Re: emit сигнала Отправлено: twp от Март 21, 2011, 12:52 ну почему, должно работать
Название: Re: emit сигнала Отправлено: Авварон от Март 21, 2011, 14:41 почитал доку, да, там нет ограничения на 1 параметр для NOTIFY сигнала.
Название: Re: emit сигнала Отправлено: twp от Март 21, 2011, 16:06 в qml сигнал будет работать даже если не указывать в NOTIFY. Т.е. можно добавить любой сигнал с любым числом параметров и он будет работать для qml. Например в examples\tutorials\gettingStarted\gsQml\filedialog\directory.h
есть сигнал Directory::directoryChanged() не задекларированный в NOTIFY, однако он используется в examples\tutorials\gettingStarted\gsQml\core\fileMenu.qml : Код: Directory { Название: Re: emit сигнала Отправлено: Авварон от Март 21, 2011, 16:21 это не то. я биндинги имел ввиду.
|