2011-12-22 3 views
0

구성 위젯에 여러 개의 QLineEdit 위젯이 있습니다.QLineEdit : 이벤트 처리기에서 여러 QLineEdit 위젯을 구분할 수있는 우아한 솔루션이 있습니까?

구성 텍스트가 변경되면 업데이트 된 값을 저장하고 싶습니다. 마지막에 하나의 함수 호출에 전달하지 않으려 고합니다.

하나의 슬롯에 연결하거나 QSignalMapper을 하나의 슬롯에 연결하려고 생각했습니다. 나는 문제 떨어져 QLineEdit들에게하는 우아한 방법을 찾는 데있어 그러나

, 나는 신호를 방출 QLineEdit 알고 싶어 - 나는 논리 내가 가진 sender()을 비교할 수 없습니다 구현 핸들러 객체에있어 이후 원래의 객체.

나는 QSignalMapper을 통해 그들을 연결할 수 있도록 내 처리기 가도록 중 하나 int id 또는 QObject* 또는 신호 그래서 새로운 텍스트를 쉽게 얻을 수 있습니다,하지만 난에 전환 할 수 있도록하고 싶습니다 방출 실제 위젯 QWidget* 참조 일부 ID는 내부적으로 올바른 설정을 업데이트합니다.

Qt 객체 또는 위젯에 태그를 지정하거나 레이블을 지정하는 우아한 방법이 있습니까?

+0

당신이 '보낸 사람을()'를 사용 할 수없는 이유 이해가 안가 - 당신은 명확 수 있을까? – Mat

+0

이벤트가 모델에서 처리되는 경우 원본 객체에 대한 참조가 없으므로'sender()가 내'serverLineEdit' 또는 다른 위젯인지 비교할 수 없습니다. 일부 ID/(objectName() 대신 ...) 확인할 수있는 태그/레이블. 하지만 어쩌면 나는 제대로하지 않을 것입니다 ... 나는'apply' 버튼을 눌렀을 때 모델에 모든 값을 보낼 수 있습니다 ... 그러나 더 우아한 것을 찾고있었습니다 – stefanB

답변

1

동적 속성을 사용하면 런타임에 QObject 파생 클래스에 추가 데이터를 '태그 지정'할 수 있습니다. QObject::setProperty 설명서를 참조하십시오.

동적 속성을 사용하는 것이 개인적으로 클래스 헤더에 설명되어 있지 않기 때문에 좋지 않습니다. 클래스에서 상속 받고 표준 속성을 추가하는 것을 선호합니다.

+0

모든 대답은 좋은 대안 솔루션을 제공합니다. 이것은'Qt'의 차이입니다. 짝수 핸들러에서 처리되는 위젯을 결정할 수 있도록 위젯을 태그하는 간단한 방법은 없습니다. – stefanB

2

"int id"값으로 사용자 고유의 QLineEdit을 재 작성할 수 있습니다. QLineEdit이 신호를 낼 때마다 매개 변수 "id"로 자신의 신호를 내 보냅니다. 당신이 개체의 정체성과 textEdited 신호를 방출하려면 여기

class MyLineEdit : public QLineEdit 
{ 
    Q_OBJECT 
    private: int id; 
    public: int getID() { return id; } 
      void setID(int _id) { id = _id; } 
    signals: void myTextEdited(QString,int); 
    slots: void emitMyTextEdited(QString text) { emit myTextEdited(text,id); } 
    public: MyLineEdit(QWidget *parent = 0) : QLineEdit(parent) 
      { 
       connect(this,SIGNAL(textEdited(QString)),this,SLOT(emitMyTextEdited(QString))); 
      } 
}; 

, 당신은 당신의 방법을 textEdited 신호를 다시 작성할 수 있습니다.

1

매핑 유형이 QObject*QSignalMapper을 통해 연결합니다. 당신은 당신의 QObject로이 같은 정의 할 수 있습니다 :

class MyQLineEditData : public QObject { 
    Q_OBJECT 
public: 
    QLineEdit* lineEdit ; 
    int id ; 
} ; 
관련 문제