Russian Qt Forum
Июнь 16, 2024, 00:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: emit сигнала  (Прочитано 9686 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« : Март 17, 2011, 00:26 »

Нормально ли эмитить сигнал void keyChanged(const QString &key); _до_ смены значения key?:
Код:
void Edition::setKey(const QString &key)
{
    Q_D(Edition);

    if (d->key != key) {
        emit keyChanged(key);
        d->key = key;
    }
}
Нужно для имплементации другого класса знать старое значение ключа, чтобы сменить в мапе. Можно получить из самой мапы, но как-то медленно. Что правильней?
Записан
asvil
Гость
« Ответ #1 : Март 17, 2011, 00:40 »

void keyChanged(old, new)?

Postscriptum: void keyChanged(new, old)? Можно приконнектить однопараметровый слот.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Март 17, 2011, 00:42 »

А если keyChanged(const QString &oldKey, const QString &newKey)?

Опередил. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Март 17, 2011, 00:44 »

а со скриптами оно будет дружить? там в NOTIFY секцию не однопараметровый ли сигнал надо?
Так бы и сделал бы, просто скриптовость останавливает
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Март 17, 2011, 00:45 »

Ну, а ежели 2 сигнала?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Март 17, 2011, 00:51 »

А это уже криво) Имплементация торчит наружу. в принципе там скорость не критична. А можно и обратную мапу забабахать. Однако ж интересны мнения, как написать "красиво".
Записан
asvil
Гость
« Ответ #6 : Март 17, 2011, 00:52 »

Две проперти?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #7 : Март 17, 2011, 00:56 »

Оригинально:) Но тоже криво. Что 2й сигнал, что 2я пропертя бесполезны всему остальному приложению, они нужны только 2му классу (пусть будет в дальнейшем Base), к-ый содержит мапу.
Записан
asvil
Гость
« Ответ #8 : Март 17, 2011, 01:16 »

Немного не в тему, но мощно. Звучит примерно так:
Каждый QObject-based класс должен реализовывать сигнал propertyChanged(propertyName, newValue, oldValue).

Ради одного класса лучше пренебречь красотой. Или патчик moc.
« Последнее редактирование: Март 17, 2011, 01:19 от Филоненко Михаил » Записан
_govorilka
Гость
« Ответ #9 : Март 17, 2011, 08:13 »

Ты можешь посылать в сигнале структуру. Тогда если тебе понадобиться еще один параметр, ты просто добавишь поле в эту структуру и тебе не придется переделывать сигнал. Если под скриптами - подразумеваешь QScript, то добавить структуру в скрипт не сложно (в библиотеки есть соотвествующие примеры).
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #10 : Март 17, 2011, 12:06 »

Не, меня декларатив интересует. Это там ограничение на сигнатуру кажется присутствует. В кьютскрипт любой сигнал можно подцепить.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #11 : Март 17, 2011, 20:07 »

Скрипты могут получать сигналы более чем с одним параметром.
Главное создать в скрипте слот с требуемым числом параметров.
Проверено на опыте. Работает
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #12 : Март 17, 2011, 20:59 »

вы про qml?
Записан
Sahab
Гость
« Ответ #13 : Март 18, 2011, 10:37 »

Цитировать
<offtop>the sexadecimal editor written completely on Qt</offtop>
Записан
twp
Гость
« Ответ #14 : Март 18, 2011, 13:20 »

если я правильно понял, был установлен кастом виджет в QML сцену через QGraphicsProxyWidget и регистрацию QML_DECLARE_TYPE. Тогда можно не использовать стандартный сигнал в секции NOTIFY декларации Q_PROPERTY (но можно и оставить как сигнал для стандартной реализации) и добавить сигнал с двумя параметрами как было предложено выше. В QML-коде его можно перехватить как обычный сигнал на изменение проперти
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.098 секунд. Запросов: 22.