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 という単一のメニュー項目を持つコンテキストメニューが表示されます。私が望むのは、ユーザーがその削除メニューアイテムをクリックするたびに、その QTreeWidgetItem を qtreewidget から削除することだけです。しかし、上記のコードでは、UI の任意の部分をクリックしても、rightclick の後に、回避したい treewidget からそれぞれの QTreeWidgetItem が削除されます。

よろしくお願いします。

4

1 に答える 1

3

QMenu::exec(...) からの戻り値を確認する必要があります。

このような:

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

これで、たとえば QAction::text() メソッドをチェックして、[削除] が実際にクリックされたかどうかを確認できます。

于 2012-09-25T11:15:40.040 に答える