8

ローカルのglassfishインストールに.earファイルと.warファイルをデプロイするための小さなGUIを作成しようとしています。そのため、ファイル名フィールド、チェックボックス、およびwar/earファイルを見つけるためのファイルダイアログボックスを表示するためのボタンを含む5つの行を作成しました。すべてのボタンで同じ関数を呼び出し、関数から呼び出しを行った5つのボタンのどれを並べ替えるか(正しいテキストフィールドを更新するため)にすると便利です。これがオブジェクト指向の方法でそれを行う意図された方法であるかどうかはわかりませんが、私の唯一のGUIプログラミング経験はいくつかの古いwin16イベントループです:)。

// BRG Anders Olme

4

2 に答える 2

9
QPushButton *buttonA = new QPushButton("A");
QPushButton *buttonB = new QPushButton("B");
QPushButton *buttonC = new QPushButton("C");

buttonA->setObjectName("A");
buttonB->setObjectName("B");
buttonC->setObjectName("C");

connect(buttonA, SIGNAL(clicked()), this, SLOT(testSlot()));
connect(buttonB, SIGNAL(clicked()), this, SLOT(testSlot()));
connect(buttonC, SIGNAL(clicked()), this, SLOT(testSlot()));

//Now in slot implementation
void QWidget::testSlot()
{
  QObject *senderObj = sender(); // This will give Sender object
  // This will give obejct name for above it will give "A", "B", "C"
  QString senderObjName = senderObj->objectName(); 

  if(senderObjName == "A")
  {
   //Implement Button A Specific 
  }
  //Similarly for "B" and "C"
  if(senderObjName == "B")
  {
   //Implement Button B Specific 
  }
  if(senderObjName == "C")
  {
   //Implement Button C Specific 
  }
}

コードが読みやすいため、このメソッドを使用してこのようなケースを実装しましたが、文字列の比較が行われるため、時間がかかる場合があります。ありがとうございました!

于 2014-09-09T10:05:30.900 に答える
8

各ボタンのclick()信号を1つの同じスロットに接続QObject * QObject::sender () const [protected]し、このスロットで使用して、どのボタンが信号を送信したか(クリックされたか)を確認します。QSignalMapperあるいは、この種のタスクのためだけに作成された特別なクラスであるを使用することもできます。

于 2011-03-04T08:12:38.597 に答える