2016-11-14 10 views
0

При построении QComboBox() модель изначально «пуста» (т. Е. Не подключена модель). После присвоения модели QComboBox::setModel() модель прилагается. Теперь мне нужно сбросить модель QComboBox в предыдущее состояние: «empty» или «none».Установите модель QComboBox равным

У меня есть QCheckBox под названием chbW1 рядом с QComboBox под названием cbWaehrung1. Перед тем, как проверить QCheckBox, модель не подключена, а QComboBox пуст. Если проверяется QCheckBox, я устанавливаю модель QComboBox в wmodel. Эта часть работает.

Теперь, если я сниму QCheckBox, я хочу вернуть QComboBox в предыдущее состояние (пустое). Но он только отключается (по коду, см. Ниже), сохраняет свой индекс и текст. Если я снова включу его (проверьте QCheckbox), старое значение (индекс и текст) все еще есть.

Это Qt 5.6 - The "еще" часть, кажется, не работает:

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()); 

Но это дает ошибку во время компиляции:

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

также:

ui->cbWaehrung1->setModel(0); 

Это приводит к ошибке во время выполнения:

не может установить 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

Спасибо. Похоже, я иду на эту вторую версию. Хотелось бы поддержать, но моя «репутация» слишком низкая. Как странно ;-) – WKarl

+0

Если ответ вам поможет, вы можете пометить его как принятый (используйте знак тика стрелками голосования). Я удивлен, что вы не можете перенести ответы на свои вопросы, даже если вы еще не можете проголосовать ни на что другое. По крайней мере, вы можете прокомментировать такие ответы. У вас скоро будет достаточно репутации, так что не беспокойтесь слишком много! –