我创建了一个名为CCalendar的小部件,该小部件继承自QCalendarWidget。 当用户右键单击CCalendar小部件时,我会显示一个customContextMenu,并且我希望获得用户右键单击以进行更改的当天的QDate。
contextMenu可以正常工作,现在我想根据单击的日期来修改菜单的内容。
我已经在https://github.com/radekp/qt/blob/master/src/gui/widgets/qcalendarwidget.cpp处检查过QCalendarWidget的源代码
我已经尝试通过以下方式使用QCalendarWidget的子元素(例如名为“ qt_calendar_calendarview”的QTableWidget *)进行访问:
QTableView *tab = this->findChild<QTableView*>("qt_calendar_calendarview");
QModelIndex idx = tab->indexAt(position);
这使我知道我们单击了QTableView的哪个单元格(例如,像单元格2,3一样),但是我不能再走了。为此,我很想访问calendarWidgetPrivate-> m_model,但是顾名思义,它是私有的。
我
到目前为止,我有这个,但这显然不是要走的路。
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 ;
}
有人可以指出我要走的路吗?