Я создал виджет с именем CCalendar, который наследуется от QCalendarWidget.Я отображаю customContextMenu, когда пользователь щелкает правой кнопкой мыши на виджете CCalendar, и я хотел бы получить QDate дня, на который пользователь щелкнул правой кнопкой мыши, чтобы измениться.
ContextMenu теперь работает так, как задуманоЯ хотел бы изменить содержимое меню в зависимости от дня, когда мы щелкнули.
Я проверил исходный код QCalendarWidget на https://github.com/radekp/qt/blob/master/src/gui/widgets/qcalendarwidget.cpp
. Я уже пытался получить доступ с помощьюдочерние элементы QCalendarWidget, такие как QTableWidget *, называемый "qt_calendar_calendarview", выполняя:
QTableView *tab = this->findChild<QTableView*>("qt_calendar_calendarview");
QModelIndex idx = tab->indexAt(position);
Это позволяет мне узнать, в какой ячейке QTableView мы щелкнули (например, в ячейке 2,3), ноЯ не могу идти дальше.Для этого я хотел бы получить доступ к calendarWidgetPrivate-> m_model, но, как следует из названия ... это личное.
I
Пока у меня есть это, но это явно не тот путь.
ccalendar.cpp:
CCalendar::CCalendar(QWidget *parent) : QCalendarWidget(parent)
{
// ... stuff ...
this->setContextMenuPolicy(Qt::CustomContextMenu);
connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showCalendarContextMenu(const QPoint&)));
}
// ... more code ...
void CCalendar::showCalendarContextMenu(const QPoint& position)
{
QTableView *tab = this->findChild<QTableView*>("qt_calendar_calendarview");
QModelIndex idx = tab->indexAt(position);
qDebug() << "Element clicked is : " << idx ;
}
Можеткто-нибудь указывает мне путь?