c++ - QSignalMapper 和 QAction 的问题永远不会触发插槽

标签 c++ qt

您好,我尝试将带有参数的插槽绑定(bind)到 QAction 触发的信号 我有这段代码,上下文菜单效果很好。但是 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)
}

最佳答案

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

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

关于c++ - QSignalMapper 和 QAction 的问题永远不会触发插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6690177/

相关文章:

c++ - 怎么可能使用 qt 的私有(private) api,即(private/qquicktextnode_p.h)?

c++ - 自定义缓冲输入流。输入结束

C++ Armadillo : GCC vs VC++2013: Operator () and overloading

C++ 错误 : Multiple definitions of class functions

c++ - Qt MySQL 适配器拒绝随机连接 : Unable to allocate a MYSQL

c++ - 我是 RUBY 的新手,我需要了解 3 个函数

C++:如何使用 libmysqld 高效读取 MySql 数据?

c++ - 使用 boost assign 初始化具有固定大小的 vector 的 vector

c++ - 如何在 QTreeWidget 中找到选定的项目?

qt - QML:下方带有图像和文本的按钮