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.

メニューは、アイテムではなく、マウスでクリックした位置にポップします。これはウィザードのようです:( 現在のアイテムの座標でメニューをポップするにはどうすればよいですか?

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 に答える