0

アプリケーションの起動時に読み取られるxmlファイルのエントリからシステムトレイアイコンメニュー(QMenu)にデータを入力しています。

アクションのSLOT終了を適切に設定する方法がわかりません。

QList<CMenuItem> menuItems = m_layout->getMenuItems();   
QListIterator<CMenuItem> iter(menuItems);
while (iter.hasNext())
{
    CMenuItem menuItem = iter.next();    
    QAction *action = new QAction(menuItem.qsTitle, this);
    connect(action, SIGNAL(triggered()), this, SLOT(launchMenuItem()));
    trayIconMenu->addAction(action);
}

「launchMenuItem()」スロットは、どのメニュー項目がトリガーされたかをどのように知るのですか?実行時まで存在するアイテムの数がわからないため、メニューアイテムごとにスロットを作成できません。

私はこれを行うためのいくつかの醜い方法を考えることができますが、私は正しい方法を探しています。

4

1 に答える 1

1

私が通常行うことは、QAction::setData(const QVariant&)必要なアクション ID を格納するために使用することです。次に、スロット側で ID を取得しQAction::data()、それに応じて動作します。QVariant明らかに、基本的な int (アクションを識別するために使用するもの) よりもはるかに多くを受け入れることに注意してQVariantください。互換性のある情報を渡すことができます。

編集:ああ!QObject::sender()ところで、トリガーされたアクションをキャストして戻すために使用しているため、これはどういうわけか醜いです。申し訳ありませんが、とにかく動作します。

于 2013-01-22T20:19:19.743 に答える