我每行都有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
因为如果编辑QTableWidget
我需要更改QDateEdit
的行选择,所以我想我可以改用......但是QEvent::ModifiedChange
并没有为此工作,我也不知道该使用什么......
答案 0 :(得分:0)
我记得有一段时间用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是哪个。由于其他原因,我通常会将我的小部件保存在某种容器中,因此上述操作会使代码复杂度降低很多。