0

内部构造函数

connect(ui.UserSpecificMaterial_treeWidget, SIGNAL(customContextMenuRequested(const QPoint &)),this, SLOT(ContMenu(const QPoint &)));

内槽

void MyContMenu::ContMenu(const QPoint &pos)
{
 QTreeWidgetItem *item = ui.UserSpecificMaterial_treeWidget->itemAt(pos);
     if (!item)
         return;
    QMenu *menu = new QMenu(ui.UserSpecificMaterial_treeWidget);
        myAction = menu->addAction("Remove");
    myAction->setIcon(QIcon(QString::fromUtf8("Resources/Remove.png")));
    myAction->setShortcut(tr("Ctrl+D"));
    myAction->setStatusTip(tr("Remove the respective material from the User DB"));
    menu->exec(ui.UserSpecificMaterial_treeWidget->viewport()->mapToGlobal(pos));
          /---code to remove the item ./ }

在上面的代码中,每当我右键单击 QTreeWidgetItem 时,它都会向我显示包含一个名为 Remove 的菜单项的上下文菜单。我想要的是,只要用户当时单击该删除菜单项,它就应该从 qtreewidget 中删除该 QTreeWidgetItem 。但是在 rigtclick 之后的上述代码中,即使我单击 UI 的任何部分,它也会从 treewidget 中删除相应的 QTreeWidgetItem,这是我想避免的。

提前致谢。

4

1 回答 1

3

您必须检查来自 QMenu::exec(...) 的返回值。

像这样:

QAction* item = myMenu.exec(QCursor::pos());

现在,您可以检查例如 QAction::text() 方法以查看是否实际单击了 Remove。

于 2012-09-25T11:15:40.040 回答