サブメニュー項目リストをクリックしたときに、同一ではなく同様のアクションを実行するコードスニペットを開発しています。添付のスナップショットを確認してください。QSignalMapper は、複数の信号を同じスロットに接続するための最適なソリューションです。
しかし、どの信号がどのスロットに対して呼び出されるのか、正確に配置することはできません。QSignalMapperに関する多くの理論を読みましたが、
http://qt-project.org/doc/qt-4.8/qsignalmapper.html
http://doc.qt.digia.com/qq/qq10-signalmapper.html#thesignalmapperapproach
彼らのコードを実装しました。上記のサンプル プログラムとは異なり、私の QAction オブジェクトは、配列内の要素を定義するように定義できないようです。なぜなら、それらの名前はデザイン ウィンドウによって自動生成されたからです。
ここでSIGNALとして何を配置すればよいのか、setMapping関数をいつ使用すればよいのかわかりません。setMapping 関数を使用する場合、どのパラメーターを実装する必要がありますか? 私は単に概念を完全に理解しておらず、何をすべきか、誰に尋ねるべきかを知らず、ここで私のコードで間違いを犯しています. 私が間違っていることを教えてください。彼が同様の問題を抱えていたので、参考のためにこれをチェックしました:
https://stackoverflow.com/questions/14151443/how-to-pass-a-qstring-to-a-qt-slot-from-a-qmenu-via-qsignalmapper-or-otherwise/14157471#14157471
************************************更新されたセクション ('14 年 3 月 3 日現在)**** ****************************************************** ******************
私の問題は、次の質問とよく似ています: QActions のリストを QMenu に追加し、それらを単一のスロットで処理するにはどうすればよいですか?
私も で setData を使用してみましたhelpAction(QAction *pAction)
が、エリアしきい値サブメニューのアクション項目をクリックしたときに得られる唯一の値は
0
私の更新された質問は、 を使用setData(const QVariant &userData)
してアクション アイテムにインデックスを割り当てる方法です。お知らせ下さい。
メインウィンドウ.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QSignalMapper>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void subMenuForThresholds();
private:
Ui::MainWindow *ui;
void createActions();
QSignalMapper *pSignalMapper;
private slots:
void interval();
void help();
void helpAction(QAction *pAction);
void setAreathreshold(int value);
};
#endif // MAINWINDOW_H
メインウィンドウ.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "intervaldialog.h"
#include "help.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
createActions();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::createActions()
{
ui->actionInterval->setStatusTip(tr("Set the interval for capturing delta & reference images"));
connect(ui->actionInterval, SIGNAL(triggered()), this, SLOT(interval()));
subMenuForThresholds();
ui->menuHelp->setStatusTip(tr("help "));
// connect(ui->menuHelp, SIGNAL(triggered(QAction*)), this, SLOT(help()));
}
void MainWindow::subMenuForThresholds()
{
pSignalMapper = new QSignalMapper(this);
// connect(pSignalMapper, SIGNAL(mapped(int)), this, SIGNAL(/*not sure what to place here?*/);
connect(ui->menuArea_Threshold, SIGNAL(triggered(QAction*)), this, SLOT(helpAction(QAction*)));
}
void MainWindow::setAreaThreshold()
{
qDebug()<<value;
}
void MainWindow::interval()
{
qDebug()<<"inside interval qdialog";
Help help;
help.exec();
}
void MainWindow::help()
{
qDebug()<<"inside help qdialog";
Help help;
help.exec();
}
void MainWindow::helpAction(QAction *pAction)
{
ui->action25_sec->setData(10);
int value = pAction->data().toInt();
qDebug()<<value;
}