• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
比尔教授的学习之家
博客园    首页    新随笔    联系   管理    订阅  订阅

Qt学习之如何在 QWidget 窗口上弹出右键菜单【转】

转载“我的Qt学习笔记 4 如何在 QWidget 窗口上弹出右键菜单”

目的 :

  • QWidget
  • 窗口上弹出右键菜单的两个方法

方法 1 :

给一个 QWidget 添加 QActions,设置 QWidget 的 contextMenuPolicy 属性为 Qt::ActionsContextMenu 值,使得窗口菜单以这些添加的 QActions 为菜单项组成一个右键菜单。

 MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
 {
     setWindowTitle(tr("Context Menu Show 1"));
    //为窗口添加QActions
     addAction(new QAction(tr("&Open"), this));
     addAction(new QAction(QIcon(":/images/mark.png"), tr("&Mark"), this));
     addAction(new QAction(tr("&Quit"), this));
     //设置contextMenuPolicy属性值为 '以Actions为弹出菜单的菜单项组成菜单'
     setContextMenuPolicy(Qt::ActionsContextMenu);
 }

  

效果:

 


方法 2 :

重写 QWidget 的被保护的虚函数 void QWidget::contextMenuEvent ( QContextMenuEvent * event ) [virtual protected],设置 QWidget 的 contextMenuPolicy 属性为 Qt::DefaultContextMenu 值,其实默认就是这个值,不用显示设置。

 MyWidget::MyWidget(QWidget *parent)
     : QWidget(parent)
 {
     setWindowTitle(tr("Context Menu Show 2"));
     setContextMenuPolicy(Qt::DefaultContextMenu); //其实不用设置,默认就是这个值
 }

 
void MyWidget::contextMenuEvent(QContextMenuEvent *event)
 {
     QMenu *menu = new QMenu(this);
     menu->addAction(new QAction(tr("&Open"), menu));
     menu->addAction(new QAction(QIcon(":/images/mark.png"), tr("&Mark"), menu));
     menu->addAction(new QAction(tr("&Quit"), menu));
     menu->move(cursor().pos()); //让菜单显示的位置在鼠标的坐标上
     menu->show();
 }

  

效果:

上面直接是在 contextMenuEvent 函数体里面 new 了个菜单和一些菜单项,这是为了演示。实际在写程序的过程中,我们往往会把这些 QAction 和 QMenu 声明为私有的成员变量,在构造 Widget 的时候,或者第一次调用 contextMenuEvent 时初始化它们,把它们的某些信号(signal)与其它组件的某些槽(slot)连接以处理一些事件,比如说单击上面演示的Open项目会弹出一个对话框,单击Quit会退出程序等等。

 

posted @ 2014-05-28 14:45  比尔教授  阅读(2461)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3