While Qt is a fantastic library, one of the great things about Win32 is that you can subclass pretty much anything you want to do pretty much anything you want. The downside of a GUI library based on inheritance class trees is that you are restricted by the foresight of the library writers in terms of what they choose to make virtual and so on.
For example, QCalendarWidget doesn't support tool tips over dates. It seems to be an accidental omission. Now we try very hard to avoid any changes to Qt at work - there has been one occasion where it was required but any time we have to do that we consider it a very bad thing.
So, for a fun little side project, I decided to rewrite a calendar widget from scratch. When I say "from scratch", I have the rich libraries of Qt to draw on - QDate, QTableWidget etc - so it wasn't too ridiculous, but we now have a calendar that can support tool tips over dates properly. It was only about 8 hours work over the weekend.
I figured since I was rewriting the widget anyway, we may as well have a really stylish calendar that fits the look of the application (based on the Manhattan style from QtCreator). The calendar is a very central part of our application so I thought it was worth putting the effort in.
So here is the original calendar widget and mine, for all to see.
If anyone else out there could shed any light on how I could have got mousemove events from the QTableView that QCalendarWidget uses internally without having to modify the source of QCalendarWidget, I'd be very interested to know. Unfortunately QCalendarWidget uses a lot of stuff internally that requires a recompile of a large amount of Qt to change, so messing with this internally wasn't an option.
Possibly it would have been an option to install an event filter on the table if I could have retrieved a pointer to it from the calendar actually. Didn't really consider that until I posted this. Ah, the joy of rambling on GameDev to solve your own problems
Yep, it was completely possible to customize the existing QCalendarWidget using event filters and I am officially an idiot. Now the calendar can be assumed to be reliable and, since it now derives from QCalendarWidget, I can set it as the calendar used by the QDateEdit dropdown as well, which is a lot better.
So once again, always a good idea to ramble in the journal.