如何从单击的事件中获取呼叫按钮

Buz*_*zzz 8 qt signals-slots pyside multiplexing

我正在尝试制作一个小gui来在我的本地glassfish安装上部署.ear和.war文件.所以我已经制作了五行,其中包含一个文件名字段,一个复选框和一个按钮,用于调出文件对话框以找到war/ear文件.让所有按钮调用相同的函数并从函数中调出五个按钮中的哪一个进行调用(更新正确的文本字段)会很不错.不知道这是否是以面向对象的方式实现它的目的,但我唯一的gui编程经验是一些旧的win16事件循环:).

// BRG Anders Olme

Dig*_*til 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 
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经使用这种方法来实现这种情况,因为代码更具可读性,但随着字符串比较的到来,它可能会非常耗时.谢谢!


Pio*_*ost 8

将每个按钮的click()信号连接到同一个插槽,并QObject * QObject::sender () const [protected]在此插槽中使用以找出发送信号的按钮(被点击).或者,您可以使用QSignalMapper哪个是专门为此类任务而制作的特殊类.