0

これは Menu クラス内にあります。問題は addAction です。これは機能しますが、スロットへの接続はありません:

QMenu* menu2 = new QMenu("Test");
menu2->addAction("Test");

私がこれを行うとき:

QMenu* menu2 = new QMenu("Test");
menu2->addAction("Test", Menu, test);

コンパイラ エラーが表示されます:「エラー: ',' トークンの前にプライマリ式が必要です」

test()Menu クラスで関数を呼び出すことを意味します。私は何を間違っていますか?

4

1 に答える 1

2

まあ、エラーはMenu引数として渡すことから来ています。あなたMenuはクラスだと言いますが、クラスはそれ自体の式ではありません。

testのインスタンスを呼び出す必要がMenuある場合(つまり、利用可能なスロットがない場合)、それMenu自体(おそらく a ) を含むウィジェットにスロットを作成し、そこに呼び出しを実装するだけです!QObjectQMenuQMainWindow

編集:例を追加します。

class MainWindow : public QMainWindow {
  Q_OBJECT
 // Usual declarations...

private slots:
  void myCustomSlot();
};

ここで、コンストラクター内でメイン ウィンドウを作成しているとします。

MainWindow::MainWindow(...) {
   // Some initialization code

   QMenu *menu2 = new QMenu("Test");
   menu2->addAction("Test", this, SLOT(myCustomSlot));
   // Some more initialization code
}

// ...

void MainWindow::myCustomSlot() {
   instanceOfMenu->test();
}

もちろん、そのクラスの外でメニューを作成する場合は、スロットをパブリックにする必要がありますが、それは別の問題です

于 2011-12-30T02:09:36.467 に答える