-2

私はQTで働いています。一般的にスロットまたは関数間で値を保持する方法はありますか?簡単にするために、フォームにツールバーの3つのボタンと行の編集があるとします。値「1」を変数に設定するための最初のボタンと、「2」を変数に設定するための2番目のボタンが必要です。3番目のボタンはこの変数を受け取り、行編集内に表示します。

したがって、最初のボタンを押してから3番目のボタンを押すと、行編集で番号「1」が表示されます。2番目のボタンを押してから3番目のボタンを押すと、行編集で数字「2」が表示されます。基本的に、これにより、3番目のボタンのスロットが1番目または2番目のボタンのいずれかによって設定された変数を検索し、それを表示します。これは完璧な例ではないことは承知していますが、概念を示していると思います。

私がそれをやろうと思った方法は次のとおりです。

  1. 彼らは私が学校で受けたVBクラスから覚えている方法です...隠線編集を作成し、必要になるまでそこに値を保存します。悲しいことに、これは複雑なプロジェクトで多くの隠線編集を意味します。うん。

  2. int main()関数でグローバル変数を作成し、その変数をすべての関数に設定します。それは混乱する可能性があり、何でもそれにアクセスできます。だからそれは厄介かもしれません。

  3. デスクトップアプリケーションのQTに「ui」というクラスがあるように見えることに気づきました。ゲッターとセッターを使って独自のクラスを作成し、UIからすべてを継承することを考えました...これはうまくいくと思いますが、やり過ぎのようです。

  4. 情報をtmpファイルに保存して読み取ります。これは、短期間の変数が必要な場合にも苦痛になる可能性があるようです。

このタスクを実行する簡単な方法はありますか?

4

1 に答える 1

1

QSignalMapperを使用して、1番目と2番目のボタンをQSignalMapperに接続できます。

signalMapper = new QSignalMapper(parent);
connect(firstButton, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(secondButton, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(firstButton, 1);
signalMapper->setMapping(firstButton, 2);

signalMapper次に、の信号をスロットに接続mapped(int)します。

connect(signalMapper, SIGNAL(mapped(int)), yourObj, SLOT(yourSlot(int)));

最初のボタンがクリックされると、引数として値1を使用してスロットが呼び出されます。2番目のボタンがクリックされると、2がスロットに渡されます。その後、渡された値を好きな場所に保存できます(のメンバー変数などyourObj)。

于 2012-10-24T03:07:16.633 に答える