Qt table 右击菜单判断位置

QPoint pos = QCursor::pos();    // 鼠标坐标
const int tableVerticalHeaderWidth = table->verticalHeader()->width();  // 纵向表头宽度
const int tableHorizontalHeaderHeight = table->horizontalHeader()->height();    // 横向表头高度
// 纵向表头
int verticalHeaderIndex = table->verticalHeader()->logicalIndexAt(tablePlanPos.y() - tableHorizontalHeaderHeight);  // 点击的表头行号
const int tablePosX = tablePos.x();
if (-1 != verticalHeaderIndex && (tablePosX >= 0 && tablePosX <= tableVerticalHeaderWidth)) {   // 限定x范围在纵向表头上
}else{
    verticalHeaderIndex = -1;
}
// 横向表头
int horizontalHeaderIndex = table->horizontalHeader()->logicalIndexAt(tablePos.x() - tableVerticalHeaderWidth); // 点击的表头列号
const int tablePosY = tablePlanPos.y();
if (-1 != horizontalHeaderIndex && (tablePosY >= 0 && tablePosY <= tableHorizontalHeaderHeight)) {  // 限定y范围在横向表头上
} else {
    horizontalHeaderIndex = -1;
}
// 单元格
QPoint tablePos = table->mapFromGlobal(pos);    // 表格相对坐标
tablePos.setX(tablePos.x() - table->verticalHeader()->width()); // 去掉横向表头
tablePos.setY(tablePos.y() - table->horizontalHeader()->height());  // 去掉纵向表头
QTableWidgetItem* item = table-->itemAt(tablePlanPos);  // 获取点击坐标的单元格
if (Q_NULLPTR != item) {    // 有数据 鼠标在单元格内
    const int row = item->row();
    const int col = item->column();
} else {
}

本文作者:vanxkr

本文链接:http://www.vanxkr.com/2021/4/Qt-table-contextMenuEvent

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0许可协议。转载请注明出处!

c++ 类的静态模板函数 不写到 头文件 的方法
0 条评论
已登录,注销 取消