У меня есть QDateTimeEdit, и пользователь должен выбрать дату с ним. Тем не менее, мне нужно выбрать последний день каждого месяца. Так, например, если пользователь выбрал 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)
}
Что-то я пропускаю? Есть идеи?
Спасибо за ваше время!
РЕДАКТИРОВАТЬ: так как вы не можете просто сделать отключение, я бы посоветовал вам вместо этого сделать проверку и удалить подключение. Вы можете сделать это :
В конструкторе:
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.
}
Других решений пока нет …