最近在开发项目时用到鼠标右键创建菜单的功能,在此做一些记录。
功能描述:QT实现点击鼠标右键创建菜单,菜单带图标,并且可以点击菜单栏选项,出现相应的界面。效果如下图所示:
实现原理:要实现上图效果,我用到QMenu,创建菜单项,将菜单项加入菜单,然后关联菜单项按钮和相应的槽函数。
代码:
1.实现菜单
QMenu *pMenu = new QMenu(this); //菜单初始化
pMenu->setStyleSheet("background-color:#1a1a1a;color:#fff;"); //设置菜单样式背景颜色
//设置菜单项
QAction *pSettask = new QAction(tr("任务设置"),this);
QAction *pEquipdebug = new QAction(tr("设备调试"),this);
QAction *pCommucontrol = new QAction(tr("通信控制"),this);
QAction *pClustercontrol = new QAction(tr("集群控制"),this);
//将菜单项加入菜单
pMenu->addAction(pSettask);
pSettask->setIcon(QIcon(":/new/prefix1/icon/205设置.png")); //设置菜单图标
pSettask->setIconVisibleInMenu(true); //图标设置为可见
pMenu->addSeparator(); //设置菜单项之间的分隔线
//其余项设置方法相同
pMenu->addAction(pEquipdebug);
pEquipdebug->setIcon(QIcon(":/new/prefix1/icon/调试.png"));
pEquipdebug->setIconVisibleInMenu(true);
pMenu->addSeparator();
pMenu->addAction(pCommucontrol);
pCommucontrol->setIcon(QIcon(":/new/prefix1/icon/通讯录.png"));
pCommucontrol->setIconVisibleInMenu(true);
pMenu->addSeparator();
pMenu->addAction(pClustercontrol);
pClustercontrol->setIcon(QIcon(":/new/prefix1/icon/集群.png"));
pClustercontrol->setIconVisibleInMenu(true);
//菜单项按钮关联槽函数
console *con = new console; //初始化要连接到的模块
connect(pSettask,&QAction::triggered,con,&console::on_stackedWidget_3_currentChanged);
connect(pEquipdebug,&QAction::triggered,con,&console::on_stackedWidget_3_currentChanged);
connect(pCommucontrol,&QAction::triggered,con,&console::on_stackedWidget_3_currentChanged);
connect(pClustercontrol,&QAction::triggered,con,&console::on_stackedWidget_3_currentChanged);
//在鼠标右键点击的地方显示菜单
pMenu->exec(cursor().pos());
2.菜单关联的槽函数
void console::on_stackedWidget_3_currentChanged(int arg1)
{
QAction *pEven = qobject_cast<QAction*>(this->sender()); //获取是由哪个菜单项按钮发出的信号
if(pEven->text().contains("任务设置"))
{
ui->stackedWidget_3->setCurrentWidget(ui->page_5);
}
if(pEven->text().contains("设备调试"))
{
ui->stackedWidget_3->setCurrentWidget(ui->page_7);
}
if(pEven->text().contains("通信控制"))
{
ui->stackedWidget_3->setCurrentWidget(ui->page_9);
}
else if(pEven->text().contains("集群控制"))
{
ui->stackedWidget_3->setCurrentWidget(ui->page_10);
}
show();
}
总结:
菜单的创建函数从Ui文件中的widget控件中,右键转到槽函数得来。
项目中的右键菜单效果我用的照片,所以分隔线的效果不是特别明显,四个菜单项需要三条分隔线。文章来源:https://www.toymoban.com/news/detail-557064.html
图标素材需要添加到资源库。文章来源地址https://www.toymoban.com/news/detail-557064.html
到了这里,关于QT实现鼠标点击鼠标右键创建菜单(带图标)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!