引言
给窗口创建右键菜单,右键的时候,右键菜单出现在鼠标点击处。同时设置右键菜单的样式,右键菜单为圆角,起初设置样式的时候,右键菜单的背景在圆角边缘会出现黑色的方角,不能很好的显示为圆角,后来设置了右键菜单无标题栏,背景透明和固定大小后可以了。
实现
void LayoutListWidget::createRightMenu()
{m_menu = new QMenu(this);m_actionDel = new QAction(QStringLiteral("删除"),m_menu);m_menu->addAction(m_actionDel);m_actionModifyName = new QAction(QStringLiteral("修改名称"),m_menu);m_menu->addAction(m_actionModifyName);m_actionSceneLinkage = new QAction(QStringLiteral("场景联动"),m_menu);m_menu->addAction(m_actionSceneLinkage);//保存创建的右键菜单,初始所有的都没有显示
// m_isDisplayRightMenu.insert(m_menu,false);setRightMenuStyle();
}
void LayoutListWidget::setRightMenuStyle()
{m_menu->setWindowFlag(Qt::FramelessWindowHint);m_menu->setAttribute(Qt::WA_TranslucentBackground);//菜单圆角QString styleSheet;styleSheet.append("QMenu{font-size: 18px;font-family: Microsoft YaHei;""font-weight: 400;color: #FFFFFF;border-radius: 10px;""background-color: rgb(8, 7, 91);border: 1px solid #01B5EF;}""QMenu::item{width:178px;height:40px;""padding-left:28px;margin-top:25px;}"//设置与上边框界限的距离"QMenu::item:selected{background-color: #01E4EE;}");m_menu->setFixedSize(180,210);m_menu->setStyleSheet(styleSheet);
}
void LayoutListWidget::on_LayoutListWidget_customContextMenuRequested(const QPoint &pos)
{Q_UNUSED(pos);if (m_menu != nullptr && m_delId != 0) {m_menu->exec(QCursor::pos());//右键菜单在点击点位置}
}
上述代码实现了右键菜单的创建,样式的设置,以及点击右键的时候使右键菜单出现在鼠标点击处。
重点
1.右键菜单的样式为圆角,需要在设置样式前先设置右键菜单的没有标题,背景透明,固定大小;
2.右键菜单出现在鼠标右键点击处,使用自带的槽函数customContextMenuRequested(const QPoint &pos)。