Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] узнать свойства нажатой кнопки QT


Автор: americanets 5.11.2008, 11:24
Как узнать свойства нажатой кнопки, нипример свойство text ? и как "слушать"  группу кнопок а не писать на каждую 

Код

connect(ui.pushButton,SIGNAL(clicked()),


например для калькулятора, чтоб нажатие кнопок с 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
Можно воспользоваться мета-объектной системой. В документации есть удачный пример:
Код

QObject *obj = new QPushButton;
         obj->metaObject()->className();             // returns "QPushButton"


Законнектить все нужные кнопки к одному слоту можно поместив эти кнопки, скажем, в группу и в цикле проходится по детям этой группы. Слот уже будет знать заранее, что его вызывает одна из кнопок этой группы и через sender() можно спокойно делать qobject_cast<> к QPushButton, а там уже вызывать обычные методы этих кнопок.

В догонку хорошая статья: http://qt.osdn.org.ua/signalmapper.html Собственно класс QSignalMapper и был создан для работы с массивами элементов управления.

Автор: americanets 6.11.2008, 09:50
SABROG, спасибо , то что нужно 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)