2011-03-04 51 views
8

我正在尝试制作一个小GUI,以在我的 本地glassfish安装中部署.ear和.war文件。所以我做了五行包含一个 文件名字段,一个复选框和一个按钮来调出文件对话框 来定位战争/耳朵文件。如果让所有按钮调用 具有相同的功能,并从该功能中挑选拨打电话的五个按钮(更新正确的文本字段)中的哪一个,那将会很好。不要 知道这是否是以面向对象方式实现它的目的方式 但我唯一的gui编程经验是一些旧的win16事件 循环:)。如何从单击的事件中获取调用按钮

// BRG的Anders Olme

+0

大多数Pyside问题也是Qt问题。如果你想更快得到答案,可以考虑用Qt标签来标记你的问题。对于Pyside来说尤其如此,因为它比PyQt年轻得多,因此不太为人所知。 – 2011-03-04 08:18:09

+0

在这里看到我的答案:http://stackoverflow.com/questions/5153157/passing-an-argument-to-a-slot/5153522#5153522。而不是'int',你可能会想使用'QString'。 – TonyK 2011-03-04 09:50:31

+0

似乎工作:) – Buzzzz 2011-03-04 12:15:29

回答

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 
    } 
} 

我已经使用这种方法来实现这种情况,因为代码更具可读性,但它可能会比较费时,因为字符串比较来了。 谢谢!

相关问题