如何在QTreeWidgetItem的坐标处弹出菜单?

时间:2012-09-30 08:38:20

标签: c++ qt contextmenu coordinates qtreewidget

在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而不是该项目。这看起来向导:( 如何在当前项目的坐标处弹出菜单?

1 个答案:

答案 0 :(得分: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());

有效:)