Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Индекс элемента в массиве
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
greh
Как определить индекс элемента в массиве при получении сигнала от него?

Пример:

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
greh,
способов много.
от перехода от массива к QMap QHash, до награждения каждого обЪекта диалога свойством индекса хоть через setProperty(QVariant) или setObjectName(const QString&) и проч
greh
Цитата(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();
kwisp
Цитата(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
Плохое решение. Используйте тогда property, имя объекта вам может понадобиться для других целей.
Или освойте все таки QSignalMapper, он для этого и предназначен
greh
Всем спасибо, воспользовался сигнал маппером.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.