2016-11-26 14 views
1

以下私のコードを引用しました。この問題は簡単に説明できます。 selectedItem-> textは、メニューで選択されたアクションを変更する正しい方法ではありません。どのようにそれを正しく行うには?QActionのトリガーを特定します

void RView::ShowContextMenu(const QPoint& pos) // this is a slot 
{ 
// for most widgets 
QPoint globalPos = statusWidget->mapToGlobal(pos); 
// for QAbstractScrollArea and derived classes you would use: 
// QPoint globalPos = myWidget->viewport()->mapToGlobal(pos); 

QMenu myMenu; 
myMenu.addAction("first"); 
myMenu.addAction("second"); 

QAction* selectedItem = myMenu.exec(globalPos); 
if (selectedItem) 
{ 
    if(selectedItem->text == "first") 
    // do something 
    if(selectedItem->text == "second") 
    // do other stuff 
} 
else 
{ 
    // nothing was chosen 
} 
} 
+0

***正しいことをする方法?***信号とスロットを使用する可能性が最も高いです。 QActionでトリガされた信号をRViewクラスのスロットに接続します。 – drescherjm

答えて

1

あなたはむしろ直接QAction Sを比較する必要があり、彼らはにローカライズされた1時間のものである場合のいずれか、あなたがそうであるように、あなたのif秒でselectedItemの比較を使用するか、いっその目的のスロットに各アクションを接続(またはラムダこのコンテキスト)。

QMenu myMenu; 
QAction *action1 = myMenu.addAction("first"); 
QAction *action2 = myMenu.addAction("second"); 
connect(action1, &QAction::triggered, [](){/*lambda code here*/}); 
connect(action2, &QAction::triggered, [](){/*lambda code here*/}); 
myMenu.exec(statusWidget->mapToGlobal(pos)); 

EDIT:あなたのヘッダー内のスロットを取るように宣言されるように、あなたが「doStuff」と「doOtherStuffを」必要になります動作するように、このために

QMenu myMenu; 
QAction *action1 = myMenu.addAction("first"); 
QAction *action2 = myMenu.addAction("second"); 
connect(action1, SIGNAL(triggered()), this, SLOT(doStuff())); 
connect(action2, SIGNAL(triggered()), this, SLOT(doOtherStuff())); 
myMenu.exec(statusWidget->mapToGlobal(pos)); 

:Qt4版のためには、スロットと、古い接続構文を使用します引数がない場合(信号QAction::triggered()には何もありません)。あなたがしたいコードは、これらのスロットの定義に行きます:

class RView 
{ 
public slots: 
    void doStuff() { /*do stuff*/ } 
    void doOtherStuff() { /*do other stuff*/ } 
}; 
+0

コンパイラは、 – tux007

+0

がトリガされたことを知らず、ラムダコードに何を貼り付けますか? – tux007

+0

申し訳ありませんが、QActionではなく、QObjectでなければなりません。それを修正しました。ラムダコードは、そのアクションがトリガされたときに必要なものです。 OPで "//何かをする"と "//他のことをやる"。 – Resurrection

関連する問題