抱歉,我之前给出的代码有误。确实,QAction
并没有提供 setStyleSheet()
方法来直接设置样式表。
要为菜单项设置样式,可以通过在样式表中使用子选择器来针对特定的菜单项进行样式设置。下面是修正后的代码示例:
QMenu* menu = new QMenu(tree);
menu->setStyleSheet("background-color: #FFFFFF;");
QString actionStyle = "QMenu::item {"
" background-color: #F3F3F3;"
" color: #000000;"
"}"
"QMenu::item:selected {"
" background-color: #3F7AFF;"
" color: #FAFBFF;"
"}"
"QMenu::item:hover {"
" background-color: #3F7AFF;"
" color: #6192FF;"
"}";
QAction* addAction = menu->addAction("添加文件", this, &CProjectList::slotAddItemInTreeFile);
addAction->setProperty("class", "menu-action");
QAction* addFolderAction = menu->addAction("添加文件夹", this, &CProjectList::slotAddItemInTreeFolder);
addFolderAction->setProperty("class", "menu-action");
QAction* removeAction = menu->addAction("删除样本", this, &CProjectList::slotRemoveTreeItem);
removeAction->setProperty("class", "menu-action");
// 将菜单项加入到一个无形的父级 QWidget 中,并为该父级 Widget 设置样式表
QWidget* dummyParentWidget = new QWidget;
dummyParentWidget->setObjectName("dummy-parent-widget");
dummyParentWidget->setStyleSheet(actionStyle);
menu->setParent(dummyParentWidget);
// 在样式表中使用子选择器为菜单项设置样式
QString menuStyle = "#dummy-parent-widget QMenu::item[class=\"menu-action\"] {"
" background-color: #F3F3F3;"
" color: #000000;"
"}"
"#dummy-parent-widget QMenu::item[class=\"menu-action\"]:selected {"
" background-color: #3F7AFF;"
" color: #FAFBFF;"
"}"
"#dummy-parent-widget QMenu::item[class=\"menu-action\"]:hover {"
" background-color: #3F7AFF;"
" color: #6192FF;"
"}";
menu->setStyleSheet(menuStyle);
menu->exec(QCursor::pos());
在这个修正后的代码示例中,我们通过 setProperty()
方法为每个动作(菜单项)设置了一个自定义的属性 "class"
,以便在样式表中进行选择。然后,我们将菜单的父级设置为一个无形的 QWidget,并为该父级 Widget 设置样式表。最后,在样式表中使用子选择器来指定针对特定菜单项的样式。
请注意,在这个修正后的代码示例中,我们使用了一个无形的父级 QWidget 来间接应用样式到菜单项上。这是因为 QMenu
本身不直接支持设置样式表,但它可以继承其父级 Widget 的样式。因此,我们创建了一个虚拟的父级 Widget,并将菜单的父级设置为该 Widget,以便间接应用样式表。
希望这次能对你有所帮助!如有任何疑问,请随时提出。
内容由零声教学AI助手提供,问题来源于学员提问