2016-11-14 2 views
0

QComboBox()을 구성 할 때 모델은 초기에 "비어 있음"(즉, 모델이 연결되지 않음)입니다. QComboBox::setModel()으로 모델을 지정하면 모델이 첨부됩니다. 이제 QComboBox 모델을 이전 상태 인 "비어 있음"또는 "없음"으로 재설정해야합니다.QComboBox 모델을 none으로 설정하십시오.

cbWaehrung1이라는 QComboBox와 함께 chbW1이라는 QCheckBox이 있습니다. QCheckBox을 확인하기 전에 모델이 연결되지 않고 QComboBox이 비어 있습니다. QCheckBox이 선택되면 QComboBox의 모델을 wmodel으로 설정합니다. 이 부분은 작동합니다.

이제 QCheckBox의 선택을 취소하면 QComboBox을 이전 상태 (비어 있음)로 되돌리려합니다. 그러나 그것은 단지 비활성화되어 (코드에 의해, 아래 참조), 색인과 텍스트를 유지합니다. 다시 켜면 (QCheckbox을 확인하십시오.) 이전 값 (색인 및 텍스트)은 계속 표시됩니다.

void MainWindow::on_chbW1_toggled(bool checked) 
{ 
    ui->cbWaehrung1->setEnabled(checked); 
    if (checked) { 
     // working 
     ui->cbWaehrung1->setModel(this->wmodel); 
     ui->cbWaehrung1->setModelColumn(1); 
     ui->cbWaehrung1->setFocus(); 
    } else { 
     // not working 
     ui->cbWaehrung1->clear(); 
     ui->cbWaehrung1->clearEditText(); 
    } 
} 

나는 또한 시도했다 무언가를

ui->cbWaehrung1->setModel(QAbstractItemModel()); 

처럼하지만이 컴파일시에 오류가 있습니다 : :이 "다른"부분이 작동하지 않는 것 -

는 Qt는 5.6이다

invalid cast to abstract class type ‘QAbstractItemModel’ 
     ui->cbWaehrung2->setModel(QAbstractItemModel()); 
                ^

또한 :

는이 작업을 수행 할 수있는 방법 0 모델

을 설정할 수 없습니다

:

ui->cbWaehrung1->setModel(0); 

이 런타임에 오류가 발생?

답변

0

당신은 빈 모델을 사용하지만, setModel()이 모델에 대한 포인터를 받아, QAbstractItemModel는 것을 (당연히) 추상적 인 것을 기억할 수 :

auto *emptyModel = new QStandardItemModel(ui->cbWaehrung2); 
ui->cbWaehrung2->setModel(emptyModel); 

우리는 빈 모델의 부모로 QComboBox을 설정; 이는 소유권을 가져오고 setModel()이 호출되어 새 모델을 설정할 때 모델을 삭제한다는 것을 의미합니다.

함수가 호출 될 때마다 새 값을 생성하지 않으려면 emptyModel을 다시 사용하거나 삭제하도록 조정하는 것이 좋습니다. 가장 쉬운 방법은 정적 빈 모델을 가지고 포인터를 전달하는 것일 수 있습니다.

static QStandardItemModel emptyModel; 
ui->cbWaehrung2->setModel(&emptyModel); 
+0

감사합니다. 내가 두 번째 버전을 찾는 것처럼 보입니다. upvote 싶지만 내 "평판"이 너무 낮습니다. 기괴한 ;-) – WKarl

+0

답변이 도움이된다면, 투표 용지에 표시된대로 틱 기호를 사용하십시오. 나는 당신이 아직 다른 어떤 것에도 투표 할 수 없더라도 자신의 질문에 대한 대답을 upvote 할 수 없다는 것에 놀랍니다. 최소한 당신은 그러한 해답에 대해 논평 할 수 있습니다. 곧 충분한 명성을 얻으므로 걱정하지 마십시오! –