我正在尝试制作一个小gui来部署.ear和.war文件 当地的玻璃鱼安装。所以我已经制作了五行包含一个 文件名字段,复选框和用于调出文件对话框的按钮 找到战争/耳朵文件。让所有按钮调用会很好 相同的功能和从功能中挑选出来的五个 拨打电话的按钮(更新正确的文本字段)。别 知道这是否是以面向对象的方式进行的预期方式 但我唯一的gui编程经验是一些旧的win16事件 循环:)。
// BRG Anders Olme
答案 0 :(得分: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
}
}
我已经使用这种方法来实现这种情况,因为代码更具可读性,但随着字符串比较的出现可能会非常耗时。 谢谢!
答案 1 :(得分:8)
将每个按钮的click()
信号连接到同一个插槽,并使用此插槽中的QObject * QObject::sender () const [protected]
找出发送信号的按钮(被点击)。或者,您可以使用QSignalMapper
,这是一个专门为此类任务而制作的特殊类。