2016-11-14 9 views
0

QComboBox()を構築するとき、モデルは最初は「空」(つまり、モデルが接続されていない)です。 QComboBox::setModel()のモデルを割り当てた後、モデルが添付されます。今、QComboBoxモデルを以前の状態にリセットする必要があります。「空」または「なし」です。QComboBoxモデルをnoneに設定する

私は、とchbW1と呼ばれ、cbWaehrung1と呼ばれるQComboBoxの横にあります。 QCheckBoxを確認する前に、モデルは付属せず、QComboBoxは空です。 QCheckBoxがチェックされている場合は、QComboBoxのモデルをwmodelに設定します。この部分は動作します。

QCheckBoxのチェックを外した場合は、QComboBoxを前の状態(空)に戻します。しかし、それは無効になる(コードでは、下記参照)、そのインデックスとテキストを保持します。もう一度オンに戻すと(QCheckboxにチェック)、古い値(インデックスとテキスト)はそのまま残ります。

これはQtの5.6である - 「他」の部分が動作していないよう:

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

ありがとうございます。私はその2番目のバージョンに行くようです。 upvoteしたいが、私の "評判"が低すぎる。どのように奇妙な;-) – WKarl

+0

答えがあなたに役立つ場合は、それを受け入れられたとしてマークすることができます(投票記号でティックシンボルを使用)。私はあなたがまだ何かに投票することができない場合でも、あなた自身の質問への回答をupvoteできないことに驚いています。少なくともあなたはそのような答えにコメントすることができます。すぐに十分な評判があるので、あまり心配しないでください! –

関連する問題