2016-08-07 7 views
0

을 읽고 파괴 만들어 다음과 같은 상황이 있습니다Qt는 - 동적으로 위젯 (QLineEdit)

내 응용 프로그램의 사용자가 선택할 수 QSpinBox을 얼마나 많은 그가 만들려고 항목의 인스턴스. 다음 단계에서 그는 각 항목의 이름을 지정해야합니다. SpinBox에서 선택한 번호에 해당하는 QLabel 및 QLineEdits를 동적으로 생성하여이 문제를 해결하고 싶습니다. 번호가 올라갈 때 새로운 LineEdits를 추가하려고합니다. 숫자가 떨어지면 이제는 더 이상 사용되지 않는 LineEdits를 제거하고 싶습니다.

글쎄,이게 내가 예상했던 것보다 훨씬 어려워. 나는 웹을 수색했지만 그 결과는 실망스러운 것 이상이었다. 동적으로 생성하고, 유지 관리하며 (아마도 목록에 있을까요?) 위젯을 파괴하는 쉬운 방법이없는 것 같습니다. 아무도이 일을 올바른 방향으로 나를 가리킬 수 있습니까?

답변

2

잠시 시간을 갖고 QListWidget을 확인하면 QListWidgetItem을 사용하여 정확히 원하는 것을 수행합니다.

작은 예 : 사용자가 X 항목을 선택하면, 당신이 만들 반복한다

QModelIndex MainWindow::addNewItem(QWidget* widget) { 
    QListWidgetItem* item = new QListWidgetItem; 
    ui->listWidget->addItem(item1); 
    ui->listWidget->setItemWidget(item, widget); 
    return ui->listWidget->indexFromItem(item); 
} 

이제이 기능은보기로 QWidget을 정의하고 반환 현재 인덱스와 QListWidget에 새로운 요소를 추가 X 위젯과 당신이 QList의 모든 위젯을 절약 할 수는 :

listWidget.clear(); 
for (int i=0; i<X; i++) { 
    QTextEdit* edit = new QTextEdit(); 
    const QModelIndex& index = addNetItem(edit); 
    qDebug() << "New element: " << index; 
    listWidget.append(edit); 
    // Handle edit text event 
    connect(edit, SIGNAL(textChanged()), this, SLOT(yourCustomHandler())); 
} 

지금, 단지 모든 편집 필드 목록을 보여줍니다.