2012-09-30 54 views
0

在QT:我瞭解創建一個QMenu:如何在QTreeWidgetItem的座標處彈出菜單?

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的位置彈出,而不是該項目。這看起來精靈:( 我怎樣才能彈出在當前項目的座標菜單

回答

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()); 

它的工作原理:)