В 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.
Меню будет отображаться в позиции нажатой кнопки мыши, а не в пункте. Это выглядит волшебником 🙁
Как я могу открыть меню в координатах текущего элемента?
Я уверен, что мое решение довольно глупо, но оно работает:
Я измерил высоту корневого 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());
Оно работает 🙂
Других решений пока нет …