我目前正在使用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类,我可以知道它是文件还是文件夹:
由于
答案 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);
}
享受。