crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Индекс элемента в массиве
greh
  опции профиля:
сообщение 8.10.2010, 13:02
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 23.11.2009
Пользователь №: 1252

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как определить индекс элемента в массиве при получении сигнала от него?

Пример:

h:
static const unsigned short COLOR_COUNT = 5;

QColorDialog* Dialog[COLOR_COUNT];

QColor* Color[COLOR_COUNT];

void SetColor(QColor SelectedColor);


cpp:
for(int i = 0; i < COLOR_COUNT; i++)
connect(Dialog[i],SIGNAL(colorSelected(QColor)),this,SLOT(SetColor(QColor)));

void MainWindow::SetColor(QColor SelectedColor)
{
    unsigned index = ???;

    Color[index] = SelectedColor;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 8.10.2010, 13:10
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


greh,
способов много.
от перехода от массива к QMap QHash, до награждения каждого обЪекта диалога свойством индекса хоть через setProperty(QVariant) или setObjectName(const QString&) и проч
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
greh
  опции профиля:
сообщение 8.10.2010, 13:18
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 23.11.2009
Пользователь №: 1252

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kwisp @ 8.10.2010, 16:10) *
greh,
способов много.
от перехода от массива к QMap QHash, до награждения каждого обЪекта диалога свойством индекса хоть через setProperty(QVariant) или setObjectName(const QString&) и проч

примерно так?
for(int i = 0; i < COLOR_COUNT; i++)
{
    ColorDialog[i] = new QColorDialog();
    ColorDialog[i].setObjectName(QString::number(i));
}

QColorDialog* sender = qobject_cast<QColorDialog *>(QObject::sender());

unsigned index = sender->objectName().toInt();
Причина редактирования: Пользуйся тэгом [code]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 8.10.2010, 13:27
Сообщение #4


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


QSignalMapper
http://doc.crossplatform.ru/qt/4.6.x/signa...and-slots-usage
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 8.10.2010, 13:43
Сообщение #5


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(greh @ 8.10.2010, 14:18) *
QColorDialog* sender = qobject_cast<QColorDialog *>(QObject::sender());
unsigned index = sender->objectName().toInt();

можно это заменить на
unsigned index;
if(sender()) index = sender()->objectName().toInt();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 8.10.2010, 13:47
Сообщение #6


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Плохое решение. Используйте тогда property, имя объекта вам может понадобиться для других целей.
Или освойте все таки QSignalMapper, он для этого и предназначен
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
greh
  опции профиля:
сообщение 8.10.2010, 17:18
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 23.11.2009
Пользователь №: 1252

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем спасибо, воспользовался сигнал маппером.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 17.1.2021, 18:28