2017-05-17 24 views
0

Iレイアウトし、別のレイアウトに行としてこのレイアウトを追加するためにウィジェットを追加する:レイアウトから複数の行を削除するにはどうすればよいですか?

lbl = new QLabel(this); 
    currentResistorText += tr("Resistor") + tr("#") + QString::number(resistorCounter); 
    lbl->setText(currentResistorText); 

    newResistorLayout = new QHBoxLayout(); 

    lineEdit = new QLineEdit(this); 

    newResistorLayout->addWidget(lbl); 
    newResistorLayout->addWidget(lineEdit); 

    ui->resistorsLayout->insertRow(fieldCounter, newResistorLayout); 

Iは、スロットにそれを行うので、複数の行を添加することができます。

1つの行を削除しようとすると動作します。ここで

はコードです:

ui->resistorsLayout->takeRow(ui->resistorLayout->rowCount() - 1); 

    delete lbl; 
    delete lineEdit; 
    delete newResistorLayout; 

私は2番目の行を削除しようとすると、プログラムは単にクラッシュします。私もremoveRow()メソッドを使用しようとしましたが、結果は同じでした。私は間違って何をしていますか?そして、複数の行を削除するにはどうすればよいですか?
私はQt 5.8を使用しています。 Qtのドキュメントから

答えて

0

[pure virtual] QLayoutItem * QLayout::takeAt(int index)

は、レイアウトから、インデックスにレイアウト項目を削除し、項目を返すために、サブクラスで実装する必要があります。そのような項目がない場合、関数は何もしないで0を返します。項目は0から連続して番号が付けられます。項目が削除されると、他の項目の番号が変更されます。

次のコードは、レイアウトからすべての項目を削除する安全な方法を示しています

QLayoutItem *child; 
while ((child = layout->takeAt(0)) != 0) { 
    ... 
    delete child; 
} 

それに役立つ願っています。

関連する問題