2011-03-04 10 views
8

작은 글자를 사용하여 로컬 글래스 피쉬 설치 에 .ear 및 .war 파일을 배포하려고합니다. 그래서 나는 파일 이름 필드, 체크 박스, 파일 다이얼로그 박스를 불러와 war/ear 파일을 찾는 다섯 개의 행을 만들었습니다. 모든 버튼을 과 동일한 기능으로 호출하고 함수에서 호출 한 사람이 올바른 텍스트 필드를 업데이트하기 위해 버튼 5 개 중 하나를 정렬하면 좋을 것입니다. Do not 하지만 내 유일한 GUI 프로그래밍 경험이 몇 가지 오래된 win16 이벤트 루프입니다 :) 은 이것이 객체 지향 방식으로 그것을 수행하는 의도 된 방법인지 안다.클릭 한 이벤트에서 호출 버튼을 얻는 방법

// BRG 앤더스 Olme

+0

대부분의 Pyside 질문은 Qt 것입니다. 더 빨리 답변을 얻으려면 Qt 태그로 질문에 태그를 달아보십시오. PyQt보다 훨씬 젊고 알려지지 않은 Pyside는 특히 그렇습니다. –

+0

내 대답보기 : http://stackoverflow.com/questions/5153157/passing-an-argument-to-a-slot/5153522#5153522 'int' 대신'QString'을 사용하고 싶을 것입니다. – TonyK

+0

작동하는 것 같습니다 :) – Buzzzz

답변

8

연결 각 버튼의 click() 하나 신호와 동일한 슬롯 및 신호를 (클릭 한) 전송하는 버튼을 찾아이 슬롯에 QObject * QObject::sender() const [protected]를 사용합니다. 또는 QSignalMapper을 사용할 수 있습니다.이 클래스는 이러한 종류의 작업을 위해 만들어진 특수한 클래스입니다.

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

코드는 읽기 쉽기 때문에이 방법을 사용했지만 문자열 비교가 이루어지면 시간이 오래 걸릴 수 있습니다. 감사합니다.