QSignalMapper和QAction的问题永远不会使Slot变得困难

时间:2011-07-14 08:02:53

标签: c++ qt

您好我尝试将带有参数的slot绑定到QAction触发的SIGNAL 我有这个代码,上下文菜单工作得很好。但OpenPublishWin从未触发过。

void MyApp::ShowContextMenu(const QPoint& pos) // this is a slot
{
    QString groupID;
    QPoint globalPos = ui.treeView_mainwindow->mapToGlobal(pos);
    QModelIndex modelIndx = ui.treeView_mainwindow->indexAt(pos);
    groupID = modelIndx.model()->index(modelIndx.row(),0,modelIndx.parent()).data(Qt::UserRole).toString();
 QMenu myMenu;
  OpenPublishAction = new QAction(tr("Send"), this);
 myMenu.addAction(OpenPublishAction);

 connect(OpenPublishAction, SIGNAL(triggered()),m_SignalMapper, SLOT(map()) );
 m_SignalMapper->setMapping(OpenPublishAction,groupID);
 connect(m_SignalMapper, SIGNAL(mapped(QString)), this, SLOT(OpenPublishWin(QString)));

    QAction* selectedItem = myMenu.exec(globalPos);

}
void MyApp::OpenPublishWin(QString gid)
{
 WRITELOG(gid)
}

1 个答案:

答案 0 :(得分:2)

快速查看QSignalMapper的Qt文档(假设您正在使用的问题标题)指出映射信号的参数是const QString&amp ;.我不记得在这种情况下参数是否需要精确连接,但它可能是一个因素。

此外,通过将它们包装在断言或某种形式的验证中,仔细检查您的连接是否正在进行。如果无法建立连接,Qt也会打印到控制台。