Qt 菜单
!(https://file.mculoop.com/images/2022/11/banner_1668588656.png )
当你走进饭店吃饭, 在接受饭店的服务前, 他们首先会提供一本菜单给你。有的菜单设计精美、清晰条理,有的则云里雾里、让人没有丝毫胃口。软件设计之道亦是如此, 菜单作为一种与用户交互的重要界面( User Interface )工具,至关重要。
<!--more-->
## 1、右键菜单
### 实现方法
- 用 QMenu 实现菜单
- 用 QAction 编写菜单项
- 实现菜单弹出事件或信号的响应
**QMenu**
QMenu 提供了用于菜单栏、上文菜单以及其他类型的弹出菜单(比如按钮菜单等)菜单部件,也就是说他承包了所有菜单的需求,用菜单找 QMenu 就对了。
**QAction**
QAction 可以理解为菜单上的菜名( menu text )、简介( tip )、配图( icon )等信息,但正如它的名字,它是被设计为可以插入部件中的用户界面动作的抽象。除了用于 QMenu ,工具栏 QToolBar 也是可以同样适用的。既然是 Action ,动作的实现(槽)和动作的触发( triggered 信号)就必不可少。可见 QAction 是才是菜单的个性化以及实质化所在,QMenu 只是为我们创造了一个展现的平台。
**菜单弹出事件或信号的响应**
如果是派生子类,一般可以选择重写 `void contextMenuEvent(QContextMenuEvent * event)` 函数;
如果是直接使用控件的实例,可以选择实现 `customContextMenuRequested` 信号的槽函数。只有当 `contextMenuPolicy` 为 `Qt::CustomContextMenu` 的时候控件才会发送 `customContextMenuRequested` 信号, 所以别忘记 `setContextMenuPolicy` 和连接信号槽。
### 实例
```cpp
QMenu *pop_menu = NULL;
QAction *add, *del;
void MainWindow::tableWidgetInit(void)
{
add = new QAction("Add", this);
del = new QAction("Delete", this);
pop_menu = new QMenu(ui->tableWidget);
pop_menu->addAction(add);
pop_menu->addAction(del);
ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->tableWidget, SIGNAL(customContextMenuRequested(QPoint)), \
this, SLOT(onTableWidgetContextMenuRequested(QPoint)));
}
void MainWindow::onTableWidgetContextMenuRequested(QPoint point)
{
pop_menu->exec(QCursor::pos());
}
```
!(https://file.mculoop.com/images/2022/11/2015-11-11_184359_1668588661.jpg)
页:
[1]