Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Hellraiser от Июнь 06, 2007, 19:05



Название: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: Hellraiser от Июнь 06, 2007, 19:05
На форме размещен виджет QEditDate с установленным в true calendarPopup. При нажатии кнопки календарь выходит в ихнем формате (неделя начинается с воскресенья). Первый день недели можно выставить через QCalendarWidget::setFirstDayOfWeek, но вся проблема в том, что невозможно обратиться к нему (findChild его не находит).
Есть ли у кого мысли, как поменять первый день недели и управлять popup-календарем?


Название: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: SABROG от Июнь 06, 2007, 22:10
examples/widgets/calendarwidget/


Название: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: Hellraiser от Июнь 07, 2007, 16:43
Цитата: "SABROG"
examples/widgets/calendarwidget/

Если бы все было так просто  :(
Самим QCalendarWidget управлять просто. Но! Требуется именно его popup вариант, который появляется только по нажатию клавиши в QDateEdit. Судя по исходным текстам, он создается динамически в момент нажатия клавиши и убивается после выбора даты. Неужели придется породится от QDateEdit и перехватывать нажатие клавиш? Хотелось бы более элегантного решения (может можно установить это как-то глобально на уровне самой Qt?).


Название: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: Sergeich от Июнь 07, 2007, 17:05
Цитата: "Hellraiser"

Если бы все было так просто  
Самим QCalendarWidget управлять просто. Но! Требуется именно его popup вариант, который появляется только по нажатию клавиши в QDateEdit. Судя по исходным текстам, он создается динамически в момент нажатия клавиши и убивается после выбора даты. Неужели придется породится от QDateEdit и перехватывать нажатие клавиш? Хотелось бы более элегантного решения (может можно установить это как-то глобально на уровне самой Qt?).

Вернуться к началу            
Похоже что действительно придеться ставить event filter на нажатие клавиш. По-уму троллям сдедовало бы добавить firstDayOfWeek в QLocale и конструкторе QCalendarWidget брать его оттуда. Попробуй им отписаться.


Название: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: SABROG от Июнь 07, 2007, 17:23
Да, QCalendarWidget жестко берет воскресенье гад :(

Код:

QCalendarModel::QCalendarModel(QObject *parent)
    : QAbstractTableModel(parent)
{
    date = QDate::currentDate();
    minimumDate = QDate::fromJulianDay(0);
    maximumDate = QDate(7999, 12, 31);
    shownYear = date.year();
    shownMonth = date.month();
    m_firstDay = Qt::Sunday;
    horizontalHeaderFormat = QCalendarWidget::ShortDayNames;
    m_weekNumbersShown = true;
    m_firstColumn = 1;
    m_firstRow = 1;
    m_view = 0;
}


Давайте патчик наклепаем для последнего 4.3.0 snapshot'a ? Надо заставить конструктор календаря определить текущую локаль и в зависимости от традиций всех стран, которые имеются в списке выставлять firstDay...

Или более простое решение, сделать доступным свойство setFirstDate у всех Date/Time контролов.


Название: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: Hellraiser от Июнь 07, 2007, 17:32
Цитата: "Sergeich"

 Попробуй им отписаться.

Отписаться бы хорошо, да с языками не очень  :(


Название: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: Tonal от Июнь 07, 2007, 17:57
А в Qt 4.2.3 календарик выпадал в нашей раскладке...

Хотя всё равно нам пришлось от него отказаться...


Название: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: Hellraiser от Июнь 07, 2007, 19:44
Цитата: "Tonal"
А в Qt 4.2.3 календарик выпадал в нашей раскладке...

Интересно узнать каким это образом? Не пожалел времени, собрал 4.2.3 - эффект тот-же самый, что и следовало ожидать - по умолчанию жесткая инициализация Qt::Sunday.


Название: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: Tonal от Июнь 08, 2007, 08:10
Действительно прогнал...
Так долго бились с другими его проблемами, что на эту просто внимание не обратили. ;-(


Название: Re: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: codeLocker от Июль 10, 2008, 12:47
Для 4.4.0 я сделал так:
   QCalendarWidget* cw = new QCalendarWidget();
   cw->setFirstDayOfWeek(Qt::Monday);
   ui.deResearchDate->setCalendarWidget(cw);


Название: Re: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: thechicho от Январь 07, 2012, 20:56
4.7.4
ui->dateEditEndPeriod->calendarWidget()->setFirstDayOfWeek(Qt::Monday);


Название: Re: QDateEdit и popup-календарь (Qt 4.3.0)
Отправлено: 5koleso от Декабрь 17, 2012, 23:25
Спасибо большое thechicho! Вы очень выручили!  Решение очевидно, но догадаться неискушенному сложно  :D