1、需求分析
- 在工作中,是不是会有这种需求,单击一个按钮显示一个窗体,该窗体位置位于按钮下方。
- 当你坐标轴是多个数值轴,我只看一个图列的曲线,就会隐藏其他数值坐标轴。
- 连接起来,就是单击一个按钮对图列进行筛选显示。
2、实施方法
- 单击显示,用代码new 一个widget(dialog)等,在里面添加你想要的东西,设置好无边框,单击响应一个槽,把它移动到光标显示位置即可。
- 第二个,new一个qmenu,添加动作即可。
- 综合实现的逻辑,我选择了第二种
3、代码实现
主代码cpp:
//菜单初始化
axisMenu = new QMenu(this);
for (int i = 0; i < 5; i++) //我的有五条坐标轴
{
axisName[i] = new QAction(axisStr[i], this);//添加动作
axisName[i]->setObjectName(axisOjbName[i]); //设置对象名字
axisName[i]->setIcon(QIcon(":/Flow/2.png"));//设置图标
axisMenu->addAction(axisName[i]);
connect(axisName[i], &QAction::triggered, this, &Flow::ChangeAxisY);//连接信号与槽
}//改变坐标轴
void Flow::ChangeAxisY()
{
if (sender()->objectName() == "A")
ChangeNum(0);
else if(sender()->objectName() == "B")
ChangeNum(1);
else if (sender()->objectName() == "C")
ChangeNum(2);
else if (sender()->objectName() == "D")
ChangeNum(3);
else if (sender()->objectName() == "E")
ChangeNum(4);
}//显示 或者不显示
void Flow::ChangeNum(int num)
{
flag[num] = !flag[num]; //取反
if (flag[num])
{
axisName[num]->setIcon(QIcon(":/Flow/2.png"));
axisY[num].setVisible(true);
series[num].setVisible(true);
}
else
{
axisName[num]->setIcon(QIcon(":/Flow/1.png"));
axisY[num].setVisible(false);
series[num].setVisible(false);
}
}
// 菜单栏的移动和显示
axisMenu->move(cursor().pos());
axisMenu->show();