Как определить индекс элемента в массиве при получении сигнала от него?
Пример:
h:
static const unsigned short COLOR_COUNT = 5;
QColorDialog* Dialog[COLOR_COUNT];
QColor* Color[COLOR_COUNT];
void SetColor(QColor SelectedColor);
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;
}
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();
http://doc.crossplatform.ru/qt/4.6.x/qsignalmapper.html
http://doc.crossplatform.ru/qt/4.6.x/signalsandslots.html#advanced-signals-and-slots-usage
unsigned index;
if(sender()) index = sender()->objectName().toInt();
Плохое решение. Используйте тогда property, имя объекта вам может понадобиться для других целей.
Или освойте все таки QSignalMapper, он для этого и предназначен
Всем спасибо, воспользовался сигнал маппером.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)