本文介绍Qt菜单功能实现。
Qt开发过程中,菜单功能用的还是比较多的,本文针对菜单栏和右键菜单功能实现作简要描述。
1.菜单栏
1)界面设计
在界面中添加菜单栏(本例中名为“menubar”),并依次添加需要的菜单(本例中名为“File”),在各菜单项中添加动作(本例中名为“actionFunc1”,“actionFunc2”)。界面设计如下图所示。
这里,菜单栏(QMenuBar)和菜单(QMenu)类似于一个容器控件,将最终需要实现功能的动作(QAction)容纳在里面,而动作的功能实现本质上和QPushButton类鼠标点击功能实现类似。
2)代码实现
这里需要连接动作触发事件和用户定义的槽函数,参考代码如下:
connect(ui->actionFunc1, &QAction::triggered, this, &MainWindow::onActionFunc1Triggered);
connect(ui->actionFunc2, &QAction::triggered, this, &MainWindow::onActionFunc2Triggered);
槽函数功能实现,参考代码如下:
void MainWindow::onActionFunc1Triggered()
{
qDebug() << "Func1 triggred";
}
void MainWindow::onActionFunc2Triggered()
{
qDebug() << "Func2 triggred";
}
可以看到,菜单动作和鼠标单击非常相似,在对应的槽函数可以添加需要实现的功能即可。
2.右键菜单
1)创建菜单
右击菜单实现这里不设计界面,而是通过代码的功能实现。参考代码如下:
void MainWindow::createRightClickMenu()
{
pMenu = new QMenu(this);
pAction1 = pMenu->addAction("Func1");
pAction2 = pMenu->addAction("Func2");
connect(pAction1, &QAction::triggered, this, &MainWindow::onActionFunc1Triggered);
connect(pAction2, &QAction::triggered, this, &MainWindow::onActionFunc2Triggered);
}
这里,和菜单栏实现类似也需要建立动作事件和用户定义的槽函数之间的连接。
2)右击显示
菜单栏的显示类似于一个模态对话框,需要调用exec()函数来显示。首先需要响应鼠标右击事件,这里覆盖mousePressEvent响应函数,参考代码如下:
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::RightButton) {
pMenu->exec(cursor().pos());
}
QMainWindow::mousePressEvent(event);
}
对于右击菜单中的功能实现和菜单栏类似,这里就不作过多描述,参考代码如下:
void MainWindow::onActionFunc1Triggered()
{
qDebug() << "Func1 triggred";
}
void MainWindow::onActionFunc2Triggered()
{
qDebug() << "Func2 triggred";
}
总结,本文介绍了Qt菜单功能实现。