我有一个QDateTimeEdit,用户应该选择一个日期。但是,我需要选择每个月的最后一天。因此,例如,如果用户选择3月3日,我应该将日期设置为3月31日。
我尝试在dateChanged(const QDate&)
信号的插槽中执行此操作。但是当我调用setDate()
函数时,它会再次调用插槽。
以下是示例代码
connect(m_pDateEdit, SIGNAL(dateChanged(const QDate&)), this, SLOT(OnDateChanged(const QDate&)));
void MyClass::OnDateChanged(const QDate& date)
{
const bool b = m_pDateEdit->blockSignals(true);
// THIS LINE CAUSES TO THIS SLOT TO BE CALLED TWICE
m_pDateEdit->setDate(QDate(date.year(), date.month(), date.daysInMonth()));
CallSomeFunction();
m_pDateEdit->blockSignals(b)
}
我缺少什么?任何想法?
感谢您的时间!
答案 0 :(得分:0)
编辑:因为你不能只是断开连接,我建议你做一个检查器,然后删除连接。你可以这样做:
在构造函数中:
QTimer::singleShot(30, this, SLOT(checkDateChanged()));
然后在课堂上:
void MyClass::checkDateChanged()
{
if (pDateEdit->day() != pDateEdit->daysInMonth())
{
m_pDateEdit->setDate(QDate(date.year(), date.month(), date.daysInMonth()));
}
CallSomeFunction();
QTimer::singleShot(30, this, SLOT(checkDateChanged())); // this will create a loop called every 30 ms.
}