0

在 QT 中:我创建了一个 QMenu:

QMenu* popMenu = new QMenu(ui->treeWidget);

我想把它弹出到当前的treewidgetitem之上,但我只知道:

popMenu->exec(QCursor::pos());

所以如果我使用:

ui->treeWidget->setCurrentItem(treeWidgetItem);//this is necessary for my program and the current item will be used elsewhere.

菜单将在鼠标单击的 pos 的 pos 上弹出,而不是在该项目上。这看起来很向导:(如何在当前项目的坐标处弹出菜单?

4

1 回答 1

0

我确定我的解决方案非常愚蠢,但它确实有效:我将根 QTreeWidgetItem 的高度测量为 15,将子 QTreeWidgetItem 的高度测量为 12。代码:

bool MainWindow::isAtItemPos()
{
    QPoint treeWidgetPos = ui->treeWidget->mapToGlobal(QPoint(0,0));
    QPoint curPos = QCursor::pos();
    int verPos = curPos.ry() - treeWidgetPos.ry();
    int verMax = 15 + 12*rootItem->childCount();
    if(verPos <= verMax)return true;
    else return false;
}

我使用它:

if(isAtItemPos())popMenu->exec(QCursor::pos());

有用 :)

于 2012-09-30T12:46:20.803 回答