根据你提供的代码,你可能会遇到样式不生效的问题。这是因为在多次调用menu->setStyleSheet()
时,后面的样式设置会覆盖前面的设置。解决方法是将所有需要应用的样式合并成一个字符串,然后一次性设置给菜单。
请尝试以下修改:
void CProjectList::slot_RightButtonClicked(QTreeWidgetItem *item, int column)
{
slot_Right_Light(item, column);
// 只针对鼠标右键
if(qApp->mouseButtons() == Qt::RightButton){
QTreeWidget* tree = item->treeWidget(); // 获取当前item所在的QTreeWidget
QString strTempFlag = tree->currentItem()->data(0, Qt::UserRole).toString();
//根据信息个数判断是实验样品
qDebug() <<"["<< __LINE__ << "] 鼠标右键点击的树状列表属性信息[" << strTempFlag << "]";
QStringList list = strTempFlag.split("*");
if(list.size() == 4) {
m_iFunctionNo = list[0].toInt(); //功能序号
m_strFunctionName = list[1]; //功能名称
m_iExperimentNo = list[2].toInt(); //实验序号
m_strExperimentName = list[3]; //实验名称
QMenu* menu = new QMenu(tree);
QString styleSheet =
"QMenu {"
"color: #2C2C2C;" // 默认字体颜色
"}"
"QMenu::item:hover {"
"color: #4780FF;" // 鼠标滑过时的颜色
"}"
"QMenu::item:selected {"
"color: #FFFFFF;" // 鼠标点击时的字体颜色
"background-color: #3F7AFF;" // 鼠标点击时的背景颜色
"}";
menu->setStyleSheet(styleSheet);
menu->addAction("添加样品", this, &CProjectList::slotAddItemInTreeSample);
menu->exec(QCursor::pos());
}
}
}
这样,在一个setStyleSheet()
调用中设置了所有需要的样式,应该能够使样式生效。记得将QMenu
、QMenu::item:hover
和QMenu::item:selected
选择器的样式都包含在同一个字符串中,并在最后一次调用中设置给菜单对象。
内容由零声教学AI助手提供,问题来源于学员提问