3

QMenuいくつかのメニュー項目が動的に作成されているがあります。

この目的のために、名前とアクション(メニュー項目がヒットした場合に実行する必要がある)を含むメニュー項目のコレクションを繰り返し処理し、それらをコンテキストメニューに追加し続けます。すべてのメニュー項目は、共通のスロットに接続する必要があります。

しかし、どういうわけかトリガーアクションは発生しません。つまり、connectステートメントに到達しましたが、制御が指定されたSLOTに渡されず、アクションは実行されません。

for (int i=0; i<Action_List.size();i++)
{
    tempAct1 = Action_List.at(i); //Action List has the list of Actions
    Context_Menu->addAction(tempAct1);
}
if (Context_Menu!=NULL) {
    Context_Menu->exec(QCursor::pos());
    int r = connect(Context_Menu, SIGNAL(triggered(QAction *)), 
                    this, SLOT(SPlusCommand(QAction *)));
}

int P14MainWindow::SPlusCommand ( QAction* Action)
{
    QVariant tempstr = Action->data();
    QString Qs = tempstr.toString();
    return QPwLocalClient::ExecuteCommand(Qs);
}

誰かが私がこれでどこが間違っているのか教えてもらえますか?

4

2 に答える 2

5

connect 前に 移動する必要があるようですexec():

connect(Context_Menu, SIGNAL(triggered(QAction *)), 
        this, SLOT(SPlusCommand(QAction *)));
Context_Menu->exec(QCursor::pos());

はメニューを同期的execに実行するため、メニューとのすべての対話が終了したときにのみこのメソッドから返されることを意味します。後で何かを接続するには遅すぎます。

于 2013-02-05T14:05:04.277 に答える
-2

個々のアクションをスロットに接続する必要があります。

connect(action, SIGNAL(triggered()), this, SLOT(yourSlot())
于 2013-02-05T13:50:29.653 に答える