找回密码
 立即注册
搜索
查看: 975|回复: 0

Qt 菜单

[复制链接]

267

主题

0

回帖

1154

积分

管理员

积分
1154
发表于 2023-12-19 01:25:06 | 显示全部楼层 |阅读模式

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


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|棱讯科技 ( 粤ICP备2024228160号-2|粤公网安备44030002003510号 )

GMT+8, 2024-11-21 19:21 , Processed in 0.014967 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表