QTableView :: mousePressEvent (QMouseEvent *)를 다시 구현할 때 일반적으로 아무런 문제없이 작동합니다. 그러나, QHeaderView에서 그것을하는 것은 나를 위해 작동하지 않습니다. 코드는 간단합니다.QHeaderView :: mousePressEvent (열/인덱스를 찾아야 함)
void my_header_t::mousePressEvent(QMouseEvent* event)
{
if (!event) {
return;
}
if (event->button() == Qt::RightButton) {
QPoint point(event->x(), event->y());
QModelIndex index = indexAt(point);
printf("%s data %s %d,%d %s (point: %d,%d)\n",
ts().c_str(), index.data().toString().toStdString().c_str(),
index.row(), index.column(), index.isValid() ? "True" : "False",
event->x(), event->y());
handle_right_click(index.data().toString());
} else {
QHeaderView::mousePressEvent(event);
}
QMouseEvent의 x() 및 y()는 정상입니다. 그러나 row()가 -1이고 column()이 -1 인 잘못된 인덱스를 만듭니다. 분명히, 메뉴를 시작하는 handle_right_click()에 빈 문자열을 전달합니다. 그 메뉴는 그것을 불렀던 열을 알지 않을 것이고, 신체 상해는 계속해서 이어질 것입니다.
나는 (const QModelIndex &) 클릭하면 텍스트와 함께 올바른 색인을 알 수 있다는 것을 알고 있습니다. 그러나 버튼을 구별해야합니다.
굉장 - 알았어요. 내가 logicalIndexAt에 대해 알고 ... 왜 그것을 시도하지 않았는지 모르겠다. 다른 사람이 다음을 참조하는 경우에만주의하십시오. QHeaderView는 기본적으로 모든 모델()에 액세스 할 수 없습니다. 내가 상속하는 동안 부모 QTableView에서 모델 (이 경우 실제로는 QSortFilterProxyModel)을 설정하고 저장합니다. 다시 한 번 감사드립니다. –