Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Индекс элемента в массиве

Автор: greh 8.10.2010, 13:02

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

Пример:

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

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

Автор: greh 8.10.2010, 13:18

Цитата(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();

Автор: igor_bogomolov 8.10.2010, 13:27

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

Автор: kwisp 8.10.2010, 13:43

Цитата(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

Плохое решение. Используйте тогда property, имя объекта вам может понадобиться для других целей.
Или освойте все таки QSignalMapper, он для этого и предназначен

Автор: greh 8.10.2010, 17:18

Всем спасибо, воспользовался сигнал маппером.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)