我在表格中有许多QComboBox
。为了知道哪个被触发,我重新映射信号以编码表格单元格位置(如Selecting QComboBox in 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编程》由Mark Summerfield撰写,详细解释了如何做这种事情。