【发布时间】:2026-02-15 01:00:02
【问题描述】:
我正在尝试在仅包含 QListWidgets 的 QTabWidget(列表)上生成右键菜单。我在下面得到一个菜单,单击标签栏高度的距离,这是预期的,因为上下文菜单已应用于 QTabWidget。
void onCustomContextMenuRequested(const QPoint& pos) {
QListWidgetItem * item = ((QListWidget*)(lists->currentWidget()))->itemAt(pos);
if (item) showContextMenu(item, QListWidget(lists->currentWidget()).viewport()->mapToGlobal(pos));
}
void showContextMenu(QListWidgetItem* item, const QPoint& globalPos) {
QMenu menu;
menu.addAction(item->text());
menu.exec(globalPos);
}
我可以通过更改让菜单出现在鼠标上,同时仍然引用它下方约 100 像素的项目
QListWidget(lists->currentWidget()).viewport()->mapToGlobal(pos));
到
QListWidget(lists->currentWidget()).viewport()->mapToParent(mapToGlobal(pos)));
但我无法让菜单指向我正在单击的项目。我已经尝试在父坐标之间进行转换,但没有效果。
QPoint pos_temp = ((QListWidget*)(lists->currentWidget()))->viewport()->mapFromParent(pos);
if (item) showContextMenu(item, QListWidget(lists->currentWidget()).viewport()->mapToGlobal(pos_temp));
我也尝试过全局坐标,以及全局和父级的组合,但效果不佳。
那么我怎样才能获得右键菜单来引用我正在点击的项目呢?
【问题讨论】: