2011-02-17 5 views
0

현재 C++에서는 QComboBox에서 선택하면 몇 개의 QLabels, QLineEdit 및 QCheckBox를 만드는 코드가 있습니다. 그러나, 나는 콤보 상자에서 새로운 선택이 만들어지면 나중의 함수에서 만든 위젯에 액세스 할 수 있기를 원합니다. ui->Object을 수행하여 Designer를 사용하여 만든 객체에 액세스 할 수 있지만 자체 코드를 사용하여 만든 객체에서는 수행 할 수 없습니다. 내가 그걸 어떻게 할 수 있는지 알기 때문에 그걸 어떻게 할 수 있을까?Qt에서 나중에 함수 호출에서 함수 내에서 생성 된 위젯에 액세스하는 방법

간단히 말해, 사용자가 선택한 항목을 기반으로 QWidgets를 동적으로 작성/삭제할 수 있기를 원합니다. 이 작업을 수행하기 위해 알아야 할 참조 또는 문서가 있습니까? 아니면 완전히 잘못하고있는 것일까 요?

if (eventType == QString::fromStdString("Birthday")) 
    { 

    QLabel *label1 = new QLabel ("Celebrant: "); 
    QLabel *label2 = new QLabel ("Surprise: "); 
    QLineEdit *lineEdit = new QLineEdit; 
    QCheckBox *box = new QCheckBox; 

    ui->gridLayout->addWidget(label1,3,0,1,1, 0); 
    ui->gridLayout->addWidget(label2,4,0,1,1,0); 
    ui->gridLayout->addWidget(lineEdit,3,1,1,1,0); 
    ui->gridLayout->addWidget(box,4,1,1,2,0); 

    } 

답변

2

(setObjectName()을 사용하여) 이름을 지정하면 나중에 QObject::findChildren()을 사용하여 찾을 수 있습니다.

하지만 회원 변수에 저장하는 것이 더 쉬울까요?

+0

이것은 생각했지만,이 경우 수많은 변수가있을 것입니다. 내 말은, 나는 이것을 할 수있다, 나는 이것이 좋은 습관을 따르는 지 확실하지 않다. – Inanepenguin

+0

좋습니다. 따라서 naming과 findChildren()을 사용하십시오. 너무 어렵지 않고 유연성이 좋습니다. – Macke

2

글쎄, 당신은 당신이 그들에 액세스 할 코드의 모든 부분에서 액세스 할 수있는 범위에서 변수를 만들 필요가 : 여기에 객체를 생성하는 내가 현재 가지고있는 코드입니다. 대부분 윈도우 클래스의 비공개 속성입니다.

1

게시 한 코드에서 기존 위젯을 그리드 레이아웃 위치로 바꾸고 싶습니다. 그렇다면 위치에 새 위젯을 추가하기 전에 다음을 수행하십시오.

QLayoutItem * existingitem = ui->gridLayout->itemAtPosition(x, y); 
if(existingitem) { 
    ui->gridLayout->removeItem(existingitem); 
    delete existingitem; 
} 
관련 문제