QT开发中文网

menu->addAction("添加文件", this, &CProjectList::slotAddItemInTreeFile)->setStyleSheet(actionStyle); 没有 setStyleSheet接口

抱歉,我之前给出的代码有误。确实,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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=9927

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?