• 9171阅读
  • 19回复

想在不同部件上右键 弹出不同的菜单? [复制链接]

上一主题 下一主题
离线senfrans
 

只看楼主 正序阅读 楼主  发表于: 2008-04-16
— 本帖被 XChinux 执行加亮操作(2008-04-19) —
我想在不同的部件上右键  希望弹出不同的菜单  该菜单中有各自的QAction

弹出菜单已可以实现  不过我想在标签上弹出。。。page上可以弹出!但是标签上还没有找到方法
也看了contextMenuPolicy 的相关属性  设成customContextMenu
通过customContextMenuRequested()信号  到SLOT  添加QAtion 再popup 
没有出项预期的效果  也许真的是要判断位置?
还是只要找到那个标签头就行了  如何找?
请达人帮忙!!!
[ 此贴被senfrans在2008-04-21 10:17重新编辑 ]
离线superx
只看该作者 19楼 发表于: 2010-02-03
但,QtoolBar不是所有的标签的集合吗?这样的话即便重写ContextMenuEvent,怎么获取menu施加在哪一个标签上面呢?
离线senfrans

只看该作者 18楼 发表于: 2008-04-21
引用第15楼guyansrg于2008-04-19 08:23发表的  :
[表情] 我把我的代码共享一下吧(Qt3实现)
void Entry::contextMenuEvent( QContextMenuEvent * e)
{
    if(e->x()>40 && e->y()>163 && e->x()<603 && e->y()<387)//位置范围判断
    {
.......





那我要怎么来确定page上标签的width 和height呢  还有坐标??
离线senfrans

只看该作者 17楼 发表于: 2008-04-21
引用第16楼songqiming于2008-04-19 08:50发表的  :
5楼的方法你看懂了吗? 不需要判断位置

我只想在页的标签上右键弹出菜单  那个QBAR  是在页内的  不是标签
如果是Qbar  直接就在其上就能弹出
离线songqiming

只看该作者 16楼 发表于: 2008-04-19
5楼的方法你看懂了吗? 不需要判断位置
忘掉自私非爱人
离线guyansrg

只看该作者 15楼 发表于: 2008-04-19
我把我的代码共享一下吧(Qt3实现)
void Entry::contextMenuEvent( QContextMenuEvent * e)
{
    if(e->x()>40 && e->y()>163 && e->x()<603 && e->y()<387)//位置范围判断
    {
        QPopupMenu* contextMenu = new QPopupMenu( Entry::table1 );
        Q_CHECK_PTR( contextMenu );
        QLabel *caption = new QLabel( "<font color=darkblue><u><b>"
        "Context Menu</b></u></font>", this );
        caption->setAlignment( Qt::AlignCenter );
        contextMenu->insertItem( caption );
        //contextMenu->insertItem( tr("&Add"),  this, SLOT(addRecord()), CTRL+Key_A );
        contextMenu->insertItem( tr("&Delete..."), this, SLOT(delRecord()), CTRL+Key_D );
        contextMenu->insertItem( tr("&Save"), this, SLOT(saveRecord()), CTRL+Key_S );
        contextMenu->exec( QCursor::pos() );
        delete contextMenu;
    }
}
离线senfrans

只看该作者 14楼 发表于: 2008-04-17
我已经可以实现在一个范围内  点击弹出菜单 

但是我想只用右键才弹出


而且只是在widget中弹出  也就是说要确定widget的x ,y
离线senfrans

只看该作者 13楼 发表于: 2008-04-17
引用第11楼tkfly0324于2008-04-17 10:55发表的  :
可以在类里设置变量
在mouseevent()里把鼠标的值赋予变量
再调用槽
在槽里就可以判断啦

我想用鼠标的右键  来弹出菜单啊

上面的代码是左右都要弹出。。
离线senfrans

只看该作者 12楼 发表于: 2008-04-17
引用第11楼tkfly0324于2008-04-17 10:55发表的  :
可以在类里设置变量
在mouseevent()里把鼠标的值赋予变量
再调用槽
在槽里就可以判断啦


比如说
可以直接用event->x();event-->y()
然后if(0<x<50)&&(0<y<50)


这个是我的代码
void desktop::mousePressEvent(QMouseEvent *event)
{ //int x=event->x();
    //int y=event->y();
   
 
        QMenu menu(page2);
        menu.addAction(action_New_Desktop);
        menu.addAction(actionAbout);
        menu.addAction(actionCustomize);
        menu.addAction(actionClose);
        //menu.exec(mapToGlobal(event->pos()));
        menu.exec( QCursor::pos());
}

我想在一个widget上面确定范围啊 
离线tkfly0324
只看该作者 11楼 发表于: 2008-04-17
可以在类里设置变量
在mouseevent()里把鼠标的值赋予变量
再调用槽
在槽里就可以判断啦
离线senfrans

只看该作者 10楼 发表于: 2008-04-17
引用第6楼tkfly0324于2008-04-17 09:32发表的  :
contextMenuEvent( QContextMenuEvent * event )
判断鼠标得位置
根据不同的位置弹出不同得菜单不行吗


问题是怎么样在槽里面来判断
离线senfrans

只看该作者 9楼 发表于: 2008-04-17
引用第7楼guyansrg于2008-04-17 09:48发表的  :
呵呵,我也遇到过这种问题
最终还是通过判断鼠标的位置解决的。
判断鼠标的坐标是否在规定的范围内,来显示相应的菜单 [表情]


老大啊  是不是在槽里面要判断鼠标的位置在那个widget的范围内啊
怎么样判断那个位置啊  QRect  QTabBar::tabRect ???有没有代码啊  救命啊 
离线wzy19856170

只看该作者 8楼 发表于: 2008-04-17
高手~~





























玄幻小说
离线guyansrg

只看该作者 7楼 发表于: 2008-04-17
呵呵,我也遇到过这种问题
最终还是通过判断鼠标的位置解决的。
判断鼠标的坐标是否在规定的范围内,来显示相应的菜单
离线tkfly0324
只看该作者 6楼 发表于: 2008-04-17
contextMenuEvent( QContextMenuEvent * event )
判断鼠标得位置
根据不同的位置弹出不同得菜单不行吗
离线zzyong
只看该作者 5楼 发表于: 2008-04-17
比如 QTabWidget  的 Qtab Bar再弹出自己的菜单,我认为这个需要这样实现:
写一个类TabBar,继承自QTabBar,然后重写QTabBar的contextMenuEvent函数
然后制定TabBar为QTabWidget的tabBar,这样就可以了.
新手
离线senfrans

只看该作者 4楼 发表于: 2008-04-16
引用第1楼songqiming于2008-04-16 14:00发表的  :
重写contextMenuEvent( QContextMenuEvent * event )函数试下

好像不得行  我反正没弄出来
右键的话  这个能在任何地方都能弹出菜单
离线senfrans

只看该作者 3楼 发表于: 2008-04-16
引用第2楼captain08于2008-04-16 16:44发表的  :
customContextMenuRequested就可以呀

这个是信号啊  要重写SLOT  自己的slot
离线captain08
只看该作者 2楼 发表于: 2008-04-16
customContextMenuRequested就可以呀
离线songqiming

只看该作者 1楼 发表于: 2008-04-16
重写contextMenuEvent( QContextMenuEvent * event )函数试下
忘掉自私非爱人
快速回复
限100 字节
 
上一个 下一个