2011-07-14 11 views
0

こんにちは、私はQActionの引数とスロットをバインドしようとしました。シグナルが発生しました 私はこのコードを持っています。しかし、OpenPublishWinは決して起動しませんでした。QSignalMapperとQActionで問題が発生しました。

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) 
} 

答えて

2

QSignalMapperのためのQtのドキュメントを簡単に見(それはあなたが質問のタイトルに基づいて使用しているものであると仮定)がマッピングされた信号のためのパラメータはconstのQStringの&であると述べています。この場合、接続にパラメータが正確である必要があるのか​​どうかは想像できませんが、それが要因になる可能性があります。

さらに、アサートまたは何らかの検証の形式でラップして接続が行われていることを再度確認します。接続ができない場合はQtもコンソールに出力します。

+1

絶対に接続をアサートしないでください!いくつかの作業をしているコードをアサートしてチェックするだけです。代わりにverifyを使用してください。 – Raiv

+0

あなたが何をしているのか分かっていて、デバッグしているだけなら、アサートはうまくいくはずです。しかし、今週のちょうどその週の間にロジックに頼って何かをデバッグしたときに、あなたが何を意味するのか分かります。 –

+0

)あなたはそれを削除するのを忘れるまで、アサートはうまくいきます。)これは遅かれ早かれ起こります... – Raiv

関連する問題