如何通过右键单击QCalendarWidget单元格来获取QDate?

时间:2019-06-25 14:12:22

标签: c++ qt qcalendarwidget

我创建了一个名为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.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 ;
}

有人可以指出我要走的路吗?

0 个答案:

没有答案