我正在尝试制作一个小GUI,以在我的 本地glassfish安装中部署.ear和.war文件。所以我做了五行包含一个 文件名字段,一个复选框和一个按钮来调出文件对话框 来定位战争/耳朵文件。如果让所有按钮调用 具有相同的功能,并从该功能中挑选拨打电话的五个按钮(更新正确的文本字段)中的哪一个,那将会很好。不要 知道这是否是以面向对象方式实现它的目的方式 但我唯一的gui编程经验是一些旧的win16事件 循环:)。如何从单击的事件中获取调用按钮
// BRG的Anders Olme
我正在尝试制作一个小GUI,以在我的 本地glassfish安装中部署.ear和.war文件。所以我做了五行包含一个 文件名字段,一个复选框和一个按钮来调出文件对话框 来定位战争/耳朵文件。如果让所有按钮调用 具有相同的功能,并从该功能中挑选拨打电话的五个按钮(更新正确的文本字段)中的哪一个,那将会很好。不要 知道这是否是以面向对象方式实现它的目的方式 但我唯一的gui编程经验是一些旧的win16事件 循环:)。如何从单击的事件中获取调用按钮
// BRG的Anders Olme
连接每个按钮的click()
信号与一个和相同的时隙,并使用QObject * QObject::sender() const [protected]
该插槽中,以找出哪些按钮发送的信号(为点击)。或者,您可以使用QSignalMapper
这是专门为此类任务制作的课程。
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
}
}
我已经使用这种方法来实现这种情况,因为代码更具可读性,但它可能会比较费时,因为字符串比较来了。 谢谢!
大多数Pyside问题也是Qt问题。如果你想更快得到答案,可以考虑用Qt标签来标记你的问题。对于Pyside来说尤其如此,因为它比PyQt年轻得多,因此不太为人所知。 – 2011-03-04 08:18:09
在这里看到我的答案:http://stackoverflow.com/questions/5153157/passing-an-argument-to-a-slot/5153522#5153522。而不是'int',你可能会想使用'QString'。 – TonyK 2011-03-04 09:50:31
似乎工作:) – Buzzzz 2011-03-04 12:15:29