QWidget focusOutEvent не получен - PullRequest
0 голосов
/ 01 апреля 2011

Я создал ввод даты, создав подклассы QLineEdit и QCalendar.Календарь отображается внизу QLineEdit, когда на него получено mousePressEvent.Проблема в том, чтобы скрыть этот календарь.Я переопределил его focusOutEvent, так как хочу, чтобы он закрывался, когда пользователь щелкает где-то еще.Но это событие не получено вообще, я подтвердил это, поставив точку останова, оно никогда не останавливается там.Я поместил в него вызов close():

class MyCalendarWidget : public QCalendarWidget
{
    Q_OBJECT

public:
    void focusOutEvent(QFocusEvent* e)
    {
        close();
    }
};

Когда я закрываю его из своего DateLineEdit, он работает как положено:

void DateLineEdit::mousePressEvent(QMouseEvent *)
{
    if (calendar->isVisible())
    {
        calendar->close();
    }
    else
    {
        calendar->move(mapToGlobal(QPoint(0, height())));
        calendar->show();
    }
}

Ответы [ 2 ]

1 голос
/ 02 апреля 2011

Знаете ли вы, что в Qt уже есть такая вещь? См. setCalendarPopup () & setCalendarWidget () класса QDateTimeEdit. Единственное отличие, которое я могу заметить сейчас, заключается в том, что для просмотра календаря пользователь должен будет щелкнуть справа от виджета вместо строки редактирования.

Надеюсь, это поможет

1 голос
/ 02 апреля 2011

Я предполагаю, что он не отправляет focusOutEvent, потому что он никогда не фокусировался;конечно, нет, если пользователь впоследствии что-то набрал в DateLineEdit.Захватите focusOutEvent из объекта DateLineEdit и закройте календарь в этой точке;хотя, возможно, вы захотите проверить, нажал ли пользователь на календарь (в этом случае он будет иметь фокус или, по крайней мере, получил mousePressEvent) и оставить его в этом случае (но в противном случае закрыть его).

...