Russian Qt Forum
Май 21, 2024, 21:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QDateEdit и popup-календарь (Qt 4.3.0)  (Прочитано 17754 раз)
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« : Июнь 06, 2007, 19:05 »

На форме размещен виджет QEditDate с установленным в true calendarPopup. При нажатии кнопки календарь выходит в ихнем формате (неделя начинается с воскресенья). Первый день недели можно выставить через QCalendarWidget::setFirstDayOfWeek, но вся проблема в том, что невозможно обратиться к нему (findChild его не находит).
Есть ли у кого мысли, как поменять первый день недели и управлять popup-календарем?
Записан
SABROG
Гость
« Ответ #1 : Июнь 06, 2007, 22:10 »

examples/widgets/calendarwidget/
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #2 : Июнь 07, 2007, 16:43 »

Цитата: "SABROG"
examples/widgets/calendarwidget/

Если бы все было так просто  Грустный
Самим QCalendarWidget управлять просто. Но! Требуется именно его popup вариант, который появляется только по нажатию клавиши в QDateEdit. Судя по исходным текстам, он создается динамически в момент нажатия клавиши и убивается после выбора даты. Неужели придется породится от QDateEdit и перехватывать нажатие клавиш? Хотелось бы более элегантного решения (может можно установить это как-то глобально на уровне самой Qt?).
Записан
Sergeich
Гость
« Ответ #3 : Июнь 07, 2007, 17:05 »

Цитата: "Hellraiser"

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

Вернуться к началу            
Похоже что действительно придеться ставить event filter на нажатие клавиш. По-уму троллям сдедовало бы добавить firstDayOfWeek в QLocale и конструкторе QCalendarWidget брать его оттуда. Попробуй им отписаться.
Записан
SABROG
Гость
« Ответ #4 : Июнь 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 контролов.
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #5 : Июнь 07, 2007, 17:32 »

Цитата: "Sergeich"

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

Отписаться бы хорошо, да с языками не очень  Грустный
Записан
Tonal
Гость
« Ответ #6 : Июнь 07, 2007, 17:57 »

А в Qt 4.2.3 календарик выпадал в нашей раскладке...

Хотя всё равно нам пришлось от него отказаться...
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #7 : Июнь 07, 2007, 19:44 »

Цитата: "Tonal"
А в Qt 4.2.3 календарик выпадал в нашей раскладке...

Интересно узнать каким это образом? Не пожалел времени, собрал 4.2.3 - эффект тот-же самый, что и следовало ожидать - по умолчанию жесткая инициализация Qt::Sunday.
Записан
Tonal
Гость
« Ответ #8 : Июнь 08, 2007, 08:10 »

Действительно прогнал...
Так долго бились с другими его проблемами, что на эту просто внимание не обратили. ;-(
Записан
codeLocker
Гость
« Ответ #9 : Июль 10, 2008, 12:47 »

Для 4.4.0 я сделал так:
   QCalendarWidget* cw = new QCalendarWidget();
   cw->setFirstDayOfWeek(Qt::Monday);
   ui.deResearchDate->setCalendarWidget(cw);
Записан
thechicho
Гость
« Ответ #10 : Январь 07, 2012, 20:56 »

4.7.4
ui->dateEditEndPeriod->calendarWidget()->setFirstDayOfWeek(Qt::Monday);
Записан
5koleso
Гость
« Ответ #11 : Декабрь 17, 2012, 23:25 »

Спасибо большое thechicho! Вы очень выручили!  Решение очевидно, но догадаться неискушенному сложно  Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.096 секунд. Запросов: 22.