Как я могу получить QDate, щелкнув правой кнопкой мыши на ячейке QCalendarWidget? - PullRequest
0 голосов
/ 25 июня 2019

Я создал виджет с именем 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 ;
}

Можеткто-нибудь указывает мне путь?

...