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


Автор: dix75 8.3.2010, 22:58
Добрый вечер!

Ситуация в следующем у меня имеется около 20 QLineEditов.
Также имеется общий слот для обработки сигналов от этих эдитов.

Но как определить в каком конкретно произошло событие?

sender - не помогает. (т.к. в зависимости от эдита могут далее возбуждаются другие сигналы)

в QAction есть метод setData в который я могу поместить уникальный id
но в эдитах такого нет.

Едиственное, что приходит на ум это сделать свич и проверять по указателю каждый эдит.

Автор: SABROG 8.3.2010, 23:03
Цитата(dix75 @  8.3.2010,  22:58 Найти цитируемый пост)
sender - не помогает. (т.к. в зависимости от эдита могут далее возбуждаются другие сигналы)

Тут по подробнее. Ты хочешь сказать, что никак не можешь узнать кто прислал сигнал?

Цитата(dix75 @  8.3.2010,  22:58 Найти цитируемый пост)
в QAction есть метод setData в который я могу поместить уникальный id
но в эдитах такого нет.


А как это тебе поможет, если тебе sender() не подходит? Если не знаешь кто прислал сигнал, то не знаешь у кого забирать данные.

Автор: dix75 8.3.2010, 23:23
Цитата(SABROG @  8.3.2010,  23:03 Найти цитируемый пост)
Тут по подробнее. Ты хочешь сказать, что никак не можешь узнать кто прислал сигнал?

Нет, узнать я могу кто.
Некий объект Эдит у которого есть определенные данные (например text)

Как бы точнее объяснить.
У меня каждый Эдит должен взаимодействовать с определенным объектом. т.е выходит что каждый сигнал эдита соединяется с объектом, но реализация слотов идентична для всех сигналов.
разница только в id эдита.
Просто мне неохота да и неверно писать 20 идентичных слота.

Добавлено через 5 минут и 32 секунды
т.е. получается 20 эдитов такого характера

Код

void mb::set_first(const QString& str)
{
   emit (edit(mb::first, str));
}

void mb::set_second(const QString& str)
{
   emit ( edit (mb::second, str));
}


Добавлено через 11 минут и 54 секунды
Хуже того объекты с которыми соединются слоты могут и не существовать.
Поэтому и необходим один глобальный слот.

Автор: SABROG 8.3.2010, 23:41
Цитата(dix75 @  8.3.2010,  23:23 Найти цитируемый пост)
Хуже того объекты с которыми соединются слоты могут и не существовать.

Связь рвется при уничтожении объекта. Главное так не делать:

Код

deleteLater();
emit Signal();


И не удалять объекты в слотах. QSignalMapper используешь?

Автор: borisbn 8.3.2010, 23:57
Пробовал http://qt.nokia.com/doc/4.6/qobject.html#setProperty и http://qt.nokia.com/doc/4.6/qobject.html#property для едитов?
В property можно записать например адрес связанного с едитом объекта

Автор: dix75 9.3.2010, 10:53
SABROG, 

У меня есть форма с едитами
и есть скрытый пулл объектов

Если объект существует он отображает данные едита в противном случае ничего нет

Ситуация похожа на MVC


Автор: SABROG 9.3.2010, 12:36
Какой объект? Edit отображает данные объекта или свои собственные данные? Текст, который отображает Edit это данные Edit'a? Какова реальная задача?

Автор: dix75 9.3.2010, 12:44
Цитата(SABROG @  9.3.2010,  12:36 Найти цитируемый пост)
Какой объект? 

Собственный (график на QWidget)

Цитата(SABROG @  9.3.2010,  12:36 Найти цитируемый пост)
Edit отображает данные объекта или свои собственные данные? 

собственные

Цитата(SABROG @  9.3.2010,  12:36 Найти цитируемый пост)
Текст, который отображает Edit это данные Edit'a? 

да

Цитата(SABROG @  9.3.2010,  12:36 Найти цитируемый пост)
Какова реальная задача?

Отображение данных едитов при вводе их пользователем автоматически отображались графически

Автор: SABROG 9.3.2010, 13:00
Цитата(dix75 @  9.3.2010,  12:44 Найти цитируемый пост)
Отображение данных едитов при вводе их пользователем автоматически отображались графически 

Чем QSignalMapper не подходит?

Автор: dix75 9.3.2010, 14:16
Цитата(SABROG @  9.3.2010,  13:00 Найти цитируемый пост)
Чем QSignalMapper не подходит?

Почему подходит.

но вариант с QObject::setProperty() и QObject::property() 
требует меньше строк в реализации.

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