꿈꾸는 시스템 디자이너

QT 변수명 동적 할당(Dynamic variable naming in QT) 본문

Development/Qt

QT 변수명 동적 할당(Dynamic variable naming in QT)

독행소년 2016. 5. 24. 10:39

UI widget이 많은 QT GUI 프로그래밍을 할 때 골치 아픈 것 중에 하나가 UI widget의 네이밍이다.

 

- pbDevice1

- pbDevice2

- pbDevice3

- pbDevice4

- pbDevice5

 

위와 같은 식으로 QPushButton의 변수명을 할당했을 때 실제 로직 코드내에서 이를 for 문을 이용해서 제어하기가 귀찮아 진다.

 

이럴때 변수명을 for문의 index로 증가시키면서 사용하는 방법은 다음과 같다.

 

     QString objName = "";

    QLineEdit* obj = NULL;
    for(int i = 0; i < 6 ; i++){
        objName.sprintf("leDevName%d",i+1);
        qDebug() << objName;
        obj = ui->centralWidget->findChild<QLineEdit*>(objName);

        if(obj){
            objName.sprintf("Sensor#%d",i+1);
            ((QLineEdit*)obj)->setText(objName);
        }
    }

 

GUI 상에 QLineEdit 객체를 6개 선언하고 그 이름은 leDevName으로 시작해서 1번부터 6번까지 할당했다.

로직내에서는 for문을 통해 index값을 증가시켜가며 leDevName1부터 leDevName6번까지 테스트를 설정하고 싶은 경우,

sprintf() 함수내에 %d 키워드를 통해서 변수명을 변경시켜 가면서, findChind() 함수를 통해 해당 이름의 변수를 찾아 setText() 함수로 텍스트를 설정하는 예제이다.

 

인터넷 상에서는 sprintf() 함수내에 "ui->" 코드까지 직접 대입하여 이용하는 예제들이 있는데 QT4.8과 QT5.x 버전에서는 정상 동작하지 않았고 findChile()함수를 호출할때 "ui->contralWidget"을 앞에 대입해서야 정상 동작하는 것을 확인했다.

Comments