• 5092阅读
  • 1回复

[提问][新手求助]各位大大们请看过来!Qt信号与槽连接成功了但是槽函数进不去是几个意思啊?T.T [复制链接]

上一主题 下一主题
离线celine6781
 

只看楼主 倒序阅读 楼主  发表于: 2014-04-07
情况是这样的。

我自己重写了一个Item,然后重写了Item和Scene的contextMenuEvent()函数,因为在Item上和Item外我想要不同的右键菜单。

在Item的类里,我新写了槽函数为了连接右键点击信号,经测试,连接成功了呐。

但是槽函数没进去啊!!!

槽函数里的断点没用啊!!!


各位大大们现个身行行好帮帮我吧!

T.T

贴一些相关的代码吧。

重写Item的右键菜单函数:
void BlocInfo::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
    event->accept();
    QMenu menu;
    QAction *renameAction = menu.addAction("Rename");
    QAction *typeAction = menu.addAction("Type");
    QAction *BypassAction = menu.addAction("Bypass type");
    QAction *resSizeAction = menu.addAction("Resize");
    QAction *delConnectAction = menu.addAction("Delete all the connections");
    QAction *selectedAction = menu.exec(event->screenPos());

    bool isConnected = QObject::connect(renameAction,SIGNAL(triggered()),
                                        this,SLOT(renameBloc()));
    qDebug() << isConnected;
}
测试结果:
这个qDebug显示的是true。
所有的QAction改成成员变量也木有用。
QMenu改成指针也木有用。

新写的slot函数:
void BlocInfo::renameBloc()
{
    qDebug() << "Test" ;
    bool a = 0;
    mBlocName = "22222";
    
}
测试结果:
这个qDebug不显示
这个函数中的断点全部不断。

重写Scene的右键菜单函数:
void Scene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
    QGraphicsItem *selectedItem = itemAt(event->scenePos());

    if (!selectedItem)
    {
        QMenu mymenu;
        QAction *add = mymenu.addAction("Add...");
        mymenu.exec(QCursor::pos());
    }
    else
    {
        QGraphicsScene::contextMenuEvent(event);
    }

}


虚心学习,如有白痴的错误,还望各位大大们包涵。
如果嫌分不够会加哒!!!
O(∩_∩)O
本帖提到的人: @room502 @htyoung @yeguoxiong
离线realfan

只看该作者 1楼 发表于: 2014-04-07
QMenu menu;是局部变量,当函数contextMenuEvent运行完后,menu就不存在了,通过menu.addAction得到的Action也就不存在了。所以,就不可能再起作用了。
快速回复
限100 字节
 
上一个 下一个