Czy uważacie, że QCalendar i QDate jest intuicyjne w użyciu?

0

Pytanie jak w tytule.
Czy uważacie, że używanie klas QDate i QCalendar jest intuicyjne w użyciu?

bo przy użyciu QCalendar(QCalendar::System system) domyślny system kalendarza jest

QCalendar::System::Gregorian 0 The default calendar, used internationally.

np spodziewałem się, że skoro QCalendar ma służyć do odwzorowania wybranego systemu kalendarzowego

A QCalendar object maps a year, month, and day-number to a specific day (ultimately identified by its Julian day number), using the rules of a particular system.

opisu wybranego systemu kalendarzowego to powinien istnieć konstruktor np

QCalendar(QDate date)

do czego zmierzam? Zmierzam do tego, że skoro QCalendar generuje kalendarz gregoriański, to powinienem w łatwy sposób go użyć aby wygenerować sobie kalendarz od wybranej daty przenieść go na widget:

np spodziewałbym się użycia QCalendar w ten sposób:

QDate date(2024,1,1);
QCalendar calendar(date);

//nawet w pętli na konsoli gdybym wypisał zawartość kalendarza, to w końcu to powinien być właściwy kalendarz
//a gdy będę chciał z jakichś powodów zrobić własny QWidgetCalendar i dalej
//tworzyć widżety, tabele etc... aby uzyskać efekt jak na zrzucie niżej to nie sądzicie, że użycie klasy
//QCalendar powinno być intuicyjne?

screenshot-20240101132225.png

a obecnie tworzenie kalendarza to droga przez mękę

i wygląda ona tak

QDate date(2024,1,1);
QCalendar calendar;

auto lambda = [&date,&calendar](int i)->QString{return calendar.monthName(QLocale::Language::Polish, i, date.year(), QLocale::LongFormat);};

for(int i=1; i<=calendar.monthsInYear(date.year()); ++i){//teoretycznie rozumiem ale czy jakiś system kalendarza ma więcej miesięcy?
  date.setDate(date.year(),i,1);// tego się nie spodziewałem, bo już użyłem konstruktora i nie jest dla mnie ważne jaką datę wpisałem

  for(int j=1; j<=calendar.daysInMonth(i,date.year()); ++j){//niby tak, ale po co takie fikołki?
  qInfo()<< j << lambda(i) << date.year() << "-" << calendar.dayOfWeek(date.addDays(j-1));

  if(calendar.dayOfWeek(date.addDays(j-1))%7==0){
    qInfo()<< Qt::endl;
  }
}
  qInfo()<< Qt::endl;
}

w kodzie jest użyta funkcja

date.setDate(date.year(),i,1);// tego się nie spodziewałem

ale przecież użyłem konstruktora

QDate date(2024,1,1);

i pytanie jest takie. Czy nie uważacie, że używanie klasy QCalendar powinno wyglądać tak jak opisałem to na początku? Bo obecnie aby wygenerować kalendarz, trzeba robić różne fikołki, zwłaszcza, że ta klasa ma zaimplementowane funkcje jak

bool isLeapYear(int year) const

a skoro to jest, to po co dziwne fikołki z czymś prostym jak kalendarz? Zwłaszcza, że jak ktoś będzie chciał użyć kalendarza

QCalendar::System::Julian 8 An ancient Roman calendar.

to klasa QCalendar powinna już sama uwzględnić odpowiednie obliczenia... i na wyjściu generować właściwy system kalendarzowy

Czy zgadzacie się z moją opinią? Wątek zakładam po to, bo chcę się dowiedzieć czy waszym zdaniem użycie tego tworu jest intuicyjne? Bo ja szczerze mówiąc męczyłem się z tym jeden dzień...

nie wiem czy ktoś będzie zainteresowany dyskusją, no ale wrzucam, może czegoś się dowiem

0

Nie rozumem czego oczekujesz od tego komponentu ?
Możliwości obejrzałeś w przykładach Qt ?

0

@zkubinski https://doc.qt.io/qt-6/qcalendar.html#partsFromDate to nie rozwiązuje twojego problemu?

0
Dregorio napisał(a):

@zkubinski https://doc.qt.io/qt-6/qcalendar.html#partsFromDate to nie rozwiązuje twojego problemu?

Nie, bo chcę mieć kalendarz, który ma funkcję rekcji na dwuklik lewym buttonem myszy. Czyli mam kalendarz i wybieram z niego jakąś datę i 2x na nim klikam i jest jakaś reakcja - ale to wykracza poza zakres tego wątku.

A ten wątek założyłem po to czy ktoś ma jakieś uwagi do tej klasy, bo rozważam napisanie swojej.

0

Ja nie mam specjalnie zastrzeżeń do tej klasy, ale to bez znaczenia — jeśli Ty masz, to pewnie warto napisać po swojemu. To Tobie ma być wygodniej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1