Используйте QMap в слоте

Я хочу использовать QMap, который я ранее создал, для использования внутри слота. Я пытался выполнить это, но это все равно не сработало (я думаю, что я просто делаю что-то глупое). Вот код, который я использую.

Конструктор:

QMap <int, QList<int> > tiles;
connect(ui->lineEdit, SIGNAL(editingFinished()), this, SLOT(someSlot()));

Теперь, всякий раз, когда я посылаю сигнал editFinished, я хочу, чтобы someSlot проверял, находится ли значение в QMap, и выполнял различные условия, если это так. Проблема в том, как мне передать свой QMap в слот? Qt, похоже, не разрешает слоты с параметрами.


person pureooze    schedule 23.01.2013    source источник
comment
Как слот узнает, какую карту использовать?   -  person cppguy    schedule 24.01.2013
comment
Вы имеете в виду что-то вроде someSlot(tiles)? Потому что это не сработало для меня. ошибка: неявное создание экземпляра неопределенного шаблона 'QMap‹int, QList‹int› ›' case 2: _t-›someSlot((reinterpret_cast‹ 'QMap‹int,QList‹int› ›( )›(_a[1]))); перерыв; ^   -  person pureooze    schedule 24.01.2013


Ответы (1)


Слот — это просто функция, вызываемая Qt. В том, как это называется, есть магия, но это всего лишь функция. Аргументы передаются в сигнал (точно так же, как обычная функция), и Qt в конечном итоге передает этот аргумент (или, что более вероятно, копию этого аргумента) в слот получателя. В Qt есть логика, в которой вам не нужно передавать в слот столько аргументов, сколько вы передавали сигнал при определении соединения, но это не для данного обсуждения.

Вы не можете передавать аргументы по имени в таком соединении.

Вы можете либо сделать так, чтобы ваш объект плитки был переменной-членом вашего класса, который реализует someSlot(), либо вам придется передавать плитки сигналу, который подключен к someSlot (const QMap >&)

Я рекомендую сделать плитки переменной-членом, а не переменной стека.

person cppguy    schedule 23.01.2013
comment
Переменная-член — это та, которая объявлена ​​в классе правильно? Потому что, когда я попытался сделать объявление QMap <int, QList<int> > tiles;, я получил ошибку, что поле «плитки» имеет неполный тип. Извините, если это глупая ошибка, но что это значит? - person pureooze; 24.01.2013
comment
О, чувак, я был таким тупым. Не обращайте внимания. В любом случае, теперь у меня все работает, спасибо. - person pureooze; 24.01.2013