| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] узнать свойства нажатой кнопки QT |
| Автор: americanets 5.11.2008, 11:24 | ||
Как узнать свойства нажатой кнопки, нипример свойство text ? и как "слушать" группу кнопок а не писать на каждую
например для калькулятора, чтоб нажатие кнопок с 0 до 9 вызывало функцию а та в свою очередь зная свойство text кнопки вставляла его как переменную |
| Автор: feanor59 5.11.2008, 13:49 |
| если вопрос свести к: "Как узнать в слоте объект, пославший сигнал?". То скорее всего никак, но тут можно сделать так. В слоте каждой кнопки сделать один единственный emit pushButton(bt.text()); , т. е. высылать сигнал с текстом нажатой кнопки, и ловить этот сигнал каким нить методом. UPD: можно ещё унаследовать от класса буттона свой класс и добавить туда свой сигнал, который будет вызываться при клике и высылать текст кнопки |
| Автор: mes 5.11.2008, 17:49 |
| см. http://doc.trolltech.com/3.3/qobject.html#sender sender () возвращает указатель на объект, пославший сигнал на слот. А дальше можно : 1. сравнить результат с адресами "всех" кнопок и таким образом узнать кто именно является отправителем. 2. Воспользоваться средствами RTTI и привести результат к типу указатель на кнопку. ну а можно как предложил выше feanor59, создать свой класс кнопки который будет передавать слоту id. |
| Автор: SABROG 6.11.2008, 00:25 | ||
Можно воспользоваться мета-объектной системой. В документации есть удачный пример:
Законнектить все нужные кнопки к одному слоту можно поместив эти кнопки, скажем, в группу и в цикле проходится по детям этой группы. Слот уже будет знать заранее, что его вызывает одна из кнопок этой группы и через sender() можно спокойно делать qobject_cast<> к QPushButton, а там уже вызывать обычные методы этих кнопок. В догонку хорошая статья: http://qt.osdn.org.ua/signalmapper.html Собственно класс QSignalMapper и был создан для работы с массивами элементов управления. |
| Автор: americanets 6.11.2008, 09:50 |
| SABROG, спасибо , то что нужно |