我QTablewidget
每行都有QDateEdit
小部件。我想知道用户编辑了哪个小部件。我所做的在类似情况下使用QComboBox
小部件
qint32 row = 0;
mapper = new QSignalMapper(this); //QFrame
for (Object const& o : o_list) {
tableWidget->setRowCount(row + 1);
QDateEdit * date = new QDateEdit(o.date); //QDate
date->setProperty(r, row); //const * char('r')
connect(date, &QDateEdit::dateChanged, mapper, &QSignalMapper::map);
mapper->setMapping(date, row);
tableWidget->setCellWidget(row, 0, date);
i++;
}
connect(mapper, SIGNAL(mapped(int)), this, SLOT(myon_dateEdit_dateChanged(int)));
唯一的问题是我无法将QDateEdit::dateChanged(QDate)
与QSignalMapper::map()
连接,因为它不需要任何参数(我对 QComboBox 没有这样的问题,因为有无参数信号)。我不需要QDate参数,因为虽然我知道小部件的位置 - 我可以稍后检查日期。有什么快速的解决方案吗?
编辑:无论如何,我已经QFrame::eventFilter
安装在QDateEdit
上,因为如果编辑了QDateEdit
,我需要更改QTableWidget
的行选择,所以我想我可以使用它......但是QEvent::ModifiedChange
不起作用,我不知道该用什么...
我记得不久前用 signalMapper 做了一些事情,但最终我更喜欢这个:
connect( date, SIGNAL( dateChanged( int ) ), this, SLOT( handleDateChange( int ) ) );
void myObject::handleDateChanged( int ) {
QDateEdit* changedEdit = static_cast<QDateEdit*>( sender() );
// changedEdit is the one that changed
}
您需要跟踪哪个QDateEdit是哪个。 出于其他原因,我通常会将我的小部件保存在某种容器中,因此执行上述操作对我来说可以大大降低代码复杂性。