8

私はこのコードを持っています:

myEdit = QLineEdit()
myQFormLayout.addRow("myLabelText", myEdit)

myEditここで、次のみを参照して行を削除する必要があります。

myQformLayout.removeRow(myEdit)

しかし、そのための API はありません。を使用できます.takeAt()が、どうすれば引数を取得できますか? ラベル インデックスまたは のインデックスを見つけるにはどうすればよいmyEditですか?

4

3 に答える 3

11

ウィジェットとそのラベル (ある場合) を削除するようにスケジュールし、それに応じてフォームを調整するだけです。ウィジェットのラベルは、labelForFieldを使用して取得できます。

Python Qt コード:

    label = myQformLayout.labelForField(myEdit)
    if label is not None:
        label.deleteLater()
    myEdit.deleteLater()
于 2012-12-12T18:08:16.550 に答える
1

私の解決策...

ヘッダーファイルで:

QPointer<QFormLayout> propertiesLayout; 

cpp ファイル内:

// Remove existing info before re-populating.
while ( propertiesLayout->count() != 0) // Check this first as warning issued if no items when calling takeAt(0).
{
    QLayoutItem *forDeletion = propertiesLayout->takeAt(0);
    delete forDeletion->widget();
    delete forDeletion;
}
于 2013-07-15T15:08:28.140 に答える
0

これは実際には非常に良い点です...の明示的な逆関数はありませんaddRow()

行を削除するには、次のようにします。

QLineEdit *myEdit;
int row;
ItemRole role;
//find the row
myQFormLayout->getWidgetPosition( myEdit, &row, &role);
//stop if not found  
if(row == -1) return;

ItemRole otheritemrole;
if( role == QFormLayout::FieldRole){
    otheritemrole = QFormLayout::LabelRole;
}
else if( role == QFormLayout::LabelRole){
    otheritemrole = QFormLayout::FieldRole;
}

//get the item corresponding to the widget. this need to be freed
QLayoutItem* editItem = myQFormLayout->itemAt ( int row, role );

QLayoutItem* otherItem = 0;

//get the item corresponding to the other item. this need to be freed too
//only valid if the widget doesn't span the whole row
if( role != QFormLayout::SpanningRole){
    otherItem = myQFormLayout->itemAt( int row, role );
}

//remove the item from the layout
myQFormLayout->removeItem(editItem);
delete editItem;

//eventually remove the other item
if( role != QFormLayout::SpanningRole){
     myQFormLayout->removeItem(otherItem);
     delete otherItem 
}

削除する前にすべてのアイテムを取得することに注意してください。アイテムが削除されたときに彼らの役割が変わるかどうかわからないからです。この動作は指定されていないので、安全にプレイしています。qt Designerでは、フォームからアイテムを削除すると、行の他のアイテムがすべてのスペースを占有します(つまり、彼の役割が変更されます...)。

どこかに機能があるのか​​もしれませんが、車輪の再発明だけでなく、壊れたものを作りました...

于 2012-12-12T15:04:47.813 に答える