Проблема с QSignalMapper и QAction никогда не вызывает слот - PullRequest
0 голосов
/ 14 июля 2011

Привет, я пытаюсь привязать слот с аргументом к сигналу, вызванному 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)
}

1 Ответ

2 голосов
/ 14 июля 2011

Беглый взгляд на документы Qt для QSignalMapper (при условии, что это то, что вы используете на основе заголовка вопроса) показывает, что параметром для отображаемого сигнала является const QString &.Я не могу вспомнить, должен ли параметр быть точным в этом случае для соединения, но это может быть фактором.

Кроме того, дважды проверьте, что ваши соединения выполняются, завернув их в утверждение или в какую-то формуиз проверки.Qt также выведет на консоль, если не удастся установить соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...