QSignalMapper и original Sender ()
У меня есть кучаQComboBox
es в таблице. Чтобы я знал, какой из них был запущен, я переназначаю сигнал для кодирования местоположения ячейки таблицы (как описано вВыбор QComboBox в QTableWidget)
(Почему Qt не делаетсначала просто отправьте сигнал, активированный ячейкой, чтобы вы могли использовать тот же текущий механизм строк / столбцов, что и для любой другой функции редактирования ячеек.т знаю.)
Но это удаляет все знания об исходном виджете отправителя. призваниеQComboBox* combo = (QComboBox* )sender()
в слот выходит из строя, предположительно потому чтоsender()
сейчас.QSignalMapper
Я могу использовать закодированную строку / столбец для поискаQComboBox
в виджете таблицы, но это кажется неправильным. Есть ли более правильный способ сделать это?
например.:
// in table creator
_signalMapper = new QSignalMapper(this);
// for each cell
QComboBox* combo = new QComboBox();
connect(combo, SIGNAL(currentIndexChanged(int)), _signalMapper, SLOT(map()));
_signalMapper->setMapping(combo, row);
// and finally
connect(_signalMapper, SIGNAL(mapped(int)),this, SLOT(changedType(int)));
// slot
void myDlg::changedType(int row)
{
QComboBox* combo = (QComboBox* )sender(); // this doesn't work !!
}
РЕДАКТИРОВАТЬ: Добавлено для дальнейшего поиска: есть новая книга "Расширенное программирование Qt " Марк Саммерфилд, который объясняет, как делать такие вещи.