教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

天富娱乐注册app下载中心 C++培训之新濠国际彩票平台资金安全吗可靠吗知乎

更新时间:2015年12月28日16时36分 来源:传智播客C/C++学科 浏览次数:

天富娱乐登录老虎机

在平时使用Qt程序开发的时候,很多时候都会涉及到鼠标右键菜单的操作,以下对鼠标右键菜单的创建做一个系统的介绍:
菜单的创建方法主要分为两种:

天富娱乐注册最新网址

重写事件处理器
void QWidget::mousePressEvent(QMouseEvent * event) 或者
void QWidget::mouseReleaseEvent(QMouseEvent * event)
当窗口接收到鼠标键消息,判断如果按下的鼠标右键则创建菜单对象:
QMenu menu;
给菜单对象添加菜单项(QAction)
QAction* action1 = menu.addAction("C++学院");
QAction* action2 = menu.addAction("C++游戏学院");
显示右键菜单:
menu.exec(QCursor::pos());
示例:
 
void Widget::mousePressEvent(QMouseEvent *ev)
{
    if(ev->button() == Qt::RightButton)
    {
        QMenu menu;
        QAction* action1 = menu.addAction("C++学院");
        QAction* action2 = menu.addAction("C++游戏学院");
        menu.exec(QCursor::pos());
    }
}
注意事项:
右键菜单显示的时候使用的坐标为屏幕坐标, 使用QCursor类的静态函数pos()可以直接得到鼠标右键按下时候的屏幕坐标。

天富娱乐登录网页版

void  setContextMenuPolicy(Qt::ContextMenuPolicy policy)为QWidget的成员函数,从QWidget直接或间接派生的类都可以使用该函数对右键菜单进行设置。
Qt::ContextMenuPolicy是一个枚举类型,包括:
Qt::NoContextMenu、Qt::PreventContextMenu、Qt::DefaultContextMenu、
Qt::ActionsContextMenu、Qt::CustomContextMenu
其中Qt::NoContextMenu、Qt::PreventContextMenu 不能实现右键菜单的功能。
Qt::DefaultContextMenu
设置此属性需要重写
void QWidget::contextMenuEvent(QContextMenuEvent * event)
事件处理器函数来实现右键菜单
示例:
在窗口构造函数中设置右键菜单的处理方式:
setContextMenuPolicy(Qt::DefaultContextMenu
重写对应的事件处理器函数:
 void Widget::contextMenuEvent(QContextMenuEvent *ev)
 {
     QMenu menu;
     QAction* action1 = menu.addAction("C++学院");
     QAction* action2 = menu.addAction("C++游戏学院");
     menu.exec(QCursor::pos());
 }
在窗口中单击鼠标右键,contextMenuEvent函数便会执行。
Qt::ActionsContextMenu
设置此属性后添加到当前窗口中所有QAction都会作为右键菜单项显示出来
示例:
 
在窗口构造函数中设置右键菜单的处理方式:
setContextMenuPolicy(Qt:: ActionsContextMenu
在当前窗口中添加QAction:
     QAction* action1 = new QAction("C++学院", this);
     QAction* action2 = new QAction("C++游戏学院", this);
     this->addAction(action1);
     this->addAction(action2);
Qt:: CustomContextMenu
它是发出QWidget::customContextMenuRequested信号,注意仅仅只是发信号,意味着要自己写显示右键菜单的槽函数(slot)这个信号是QWidget唯一与右键菜单有关的信号(也是自有的唯一信号),同时也是很容易被忽略的signal:
void customContextMenuRequested ( const QPoint & pos )
该信号的发出条件是:用户请求contextMenu(常规就是鼠标右击)且同时被击的widget其contextMenuPolicy又是Qt::CustomContextMenu。
注意: 信号中的参数pos为当前窗口的坐标,并非屏幕坐标。
示例:
 
     
     setContextMenuPolicy(Qt::CustomContextMenu);
     
 connect(this, SIGNAL(customContextMenuRequested(QPoint)), 
         this, SLOT(ShowContexMenu(QPoint)));
 
 void Widget::ShowContexMenu(const QPoint &pos)
 {
     QMenu menu;
     QAction* action1 = menu.addAction("C++学院");
 QAction* action2 = menu.addAction("C++游戏学院");
 
     QPoint newPt = this->mapToParent(pos);
 menu.exec(newPt);
 
 
 } 本文版权归传智播客C++培训学院所有,欢迎转载,转载请注明作者出处。谢谢! 作者:传智播客C/C++培训学院 首发:http://tianfu2024.sbs/c/
0 分享到:
和我们在线交谈!