これは実際には非常に良い点です...の明示的な逆関数はありません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では、フォームからアイテムを削除すると、行の他のアイテムがすべてのスペースを占有します(つまり、彼の役割が変更されます...)。
どこかに機能があるのかもしれませんが、車輪の再発明だけでなく、壊れたものを作りました...