Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] узнать свойства нажатой кнопки QT, signal mapper 
V
    Опции темы
americanets
Дата 5.11.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



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

Код

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


например для калькулятора, чтоб нажатие кнопок с 0 до 9 вызывало функцию а та в свою очередь зная свойство text кнопки вставляла его как переменную


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
feanor59
Дата 5.11.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 24.1.2008
Где: Пермь

Репутация: нет
Всего: нет



если вопрос свести к: "Как узнать в слоте объект, пославший сигнал?". То скорее всего никак, но тут можно сделать так. В слоте каждой кнопки сделать один единственный emit pushButton(bt.text()); , т. е. высылать сигнал с текстом нажатой кнопки, и ловить этот сигнал каким нить методом.
UPD: можно ещё унаследовать от класса буттона свой класс и добавить туда свой сигнал, который будет вызываться при клике и высылать текст кнопки

Это сообщение отредактировал(а) feanor59 - 5.11.2008, 13:50
PM MAIL ICQ GTalk   Вверх
mes
Дата 5.11.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



см. http://doc.trolltech.com/3.3/qobject.html#sender
sender () возвращает указатель на объект, пославший сигнал на слот.
А дальше можно :
1. сравнить результат с  адресами  "всех" кнопок и таким образом узнать кто именно является отправителем.
2. Воспользоваться средствами RTTI и привести результат к типу указатель на  кнопку.

ну а можно как предложил выше feanor59,  создать свой класс кнопки который будет передавать слоту id.



Это сообщение отредактировал(а) mes - 5.11.2008, 17:49


--------------------
PM MAIL WWW   Вверх
SABROG
Дата 6.11.2008, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Можно воспользоваться мета-объектной системой. В документации есть удачный пример:
Код

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


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

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

Это сообщение отредактировал(а) SABROG - 6.11.2008, 09:37


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
americanets
Дата 6.11.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



SABROG, спасибо , то что нужно 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.