当你走进饭店吃饭, 在接受饭店的服务前, 他们首先会提供一本菜单给你。有的菜单设计精美、清晰条理,有的则云里雾里、让人没有丝毫胃口。软件设计之道亦是如此, 菜单作为一种与用户交互的重要界面( User Interface )工具,至关重要。
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 和连接信号槽。
实例
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());
}
|