qt / c ++上下文菜单 - 禁用项目

时间:2015-05-05 16:33:56

标签: c++ qt qtreewidget

我目前正在使用Qt和c ++开发一个应用程序,例如浏览器。

我创建了一个上下文菜单,允许右键单击操作,例如删除,重命名和添加文件夹。

void MyTreeWidget::createContextMenu() {    
    contextMenu = new QMenu();
    setContextMenuPolicy(Qt::ActionsContextMenu);

    addFolderAction = new QAction("Add Folder", contextMenu);
    addAction(addFolderAction);
    connect(addFolderAction, SIGNAL(triggered()),this,SLOT(onAddFolderActionTree()));

    deleteAction = new QAction("Delete", contextMenu);
    addAction(deleteAction);
    connect(deleteAction, SIGNAL(triggered()),this,SLOT(onDeleteAction()));

    RenameAction = new QAction("Rename", contextMenu);
    addAction(RenameAction);
    connect(RenameAction, SIGNAL(triggered()),this,SLOT(onRenameAction()));

}

这很好用。当您在我的treewidget中选择文件或文件夹并进行右键单击时,将使用此上下文菜单。我的问题是,即使我选择了一个文件,我也建议使用“添加文件夹”选项。您无法在文件中创建文件夹。

我想要的是在选择文件时禁用该选项,并在它是文件夹时启用它。

通过获取我已经重载的TreeWidgetItem类,我可以知道它是文件还是文件夹:

由于

2 个答案:

答案 0 :(得分:2)

您可以禁用QAction。在这种情况下"添加文件夹"菜单项将被禁用:

addFolderAction->setEnabled(false);

答案 1 :(得分:1)

在你的' addFolderAction'上使用QAction :: setEnabled(bool)方法。

使用它的一种方法是:

void
MyTreeWidget::updateMenuActions()
{
    if(!contextMenu)
        return;
    bool addFolderEnabled = <check TreeWidgetItem here to enable / disable>;
    addFolderAction->setEnabled(bEnabled);
}

在显示上下文菜单之前调用updateMenuActions()方法。

我实际上更喜欢下面的代码,以防您遇到可以指向动作的NULL指针的情况(对于您甚至不添加它们的情况):

void
MyTreeWidget::updateMenuActions()
{
    if(!contextMenu)
        return;
    bool addFolderEnabled = <check TreeWidgetItem here to enable / disable>;
    updateAction(addFolderAction, bEditEnabled);
}

void
MyTreeWidget::updateAction(QAction* pAction, const bool& bEnabled)
{
    if(pAction)
        pAction->setEnabled(bEnabled);
}

享受。