Bu kodu vardır . .takeAt()
'u kullanabilirim ama nasıl argüman alabilirim? Etiket dizinini veya myEdit
dizinini nasıl bulabilirim?basitçe QFormLayout içinde satır nasıl silinir programlama yoluyla
cevap
Bozuk bir tane ... yapılan yerde ve sadece bir fonksiyon vardır form buna göre kendini ayarlar. Widget'ın etiketi labelForField kullanılarak alınabilir.
Python Qt kodu:
label = myQformLayout.labelForField(myEdit)
if label is not None:
label.deleteLater()
myEdit.deleteLater()
'ı kullanmayı deneyin, böylece layout.update() yöntemini çağırmalıyım, çünkü sadece deleteLater() – borovsky
@borovsky'den sonra iyi görünüyor. Üzgünüm, ne demek istediğini anlamadım. DeleteLater() 'i çağırmadan önce ne yapıyorsunuz? – ekhumoro
@borovsky. Bir widget silindiğinde, Qt tüm çocuklarını da yinelemeli olarak siler (bu yüzden widget'ların her zaman ebeveynleri olduğundan emin olmak iyi bir fikir olabilir). Python tarafında, çöp toplayıcısı sonunda temizlik yapar. Bununla birlikte, bir nesneyi referans olarak tutuyorsanız (ör. Örnek özniteliği), bunu kendiniz açıkça silmek isteyebilirsiniz. Qt, C++ parçasını sildikten sonra, Python parçası kullanılamaz duruma gelir, bu nedenle bir şey yapmaya çalışırsanız RuntimeErrors'u alırsınız. – ekhumoro
Bu aslında çok iyi bir nokta ... addRow()
için açık bir ters işlev yoktur. Onları çıkarmadan önce tüm öğeleri almak
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
}
Not:
aşağıdakileri yapabilirsiniz satır kaldırmak için. Çünkü bir öğe kaldırıldığında rollerinin değişip değişmeyeceğini bilmiyorum. Bu davranış belirtilmemiş, bu yüzden ben güvenli oynuyorum. Qt tasarımcısında, bir öğeyi bir formdan kaldırdığınızda, satırındaki diğer öğe tüm alanı kaplar (bu, rolünün değiştiği anlamına gelir).Belki tekerleği yeniden keşfetti ama sadece silinmek üzere (eğer varsa) widget'ı ve etiketini planlamak ve izin verebilir
benim çözüm ... başlık dosyasına
:
QPointer<QFormLayout> propertiesLayout;
cpp dosyasında:
// 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;
}
- 1. programlama yoluyla
- 2. ImageMagick/Mogrify - programlama yoluyla
- 3. biz programlama yoluyla
- 4. Temel Veriler: kuralı programlama yoluyla silme
- 5. Programlama yoluyla destekleyici içinde bileşik bileşen oluşturun ve ekleyin
- 6. nasıl erişilir EntityDataSource seçilmiş veri programlama yoluyla
- 7. jQuery sürümü bilmek Programlama yoluyla
- 8. Bir tablonun içinde bir satır nasıl silinir? IReport
- 9. Ionic2 programlama yoluyla yanyana bir iyon-scroll
- 10. Programlama yoluyla kaynak sağlama kaynakları nasıl 11g istemci api
- 11. FTP kullanıcısı ssh içinde nasıl silinir?
- 12. programlama yoluyla basit bir drilldown grafik var Highcharts
- 13. nasıl silinir dosyaları
- 14. Seçilen renk kendo ui ızgara arka plan rengini nasıl ayarlanır programlama yoluyla
- 15. Geçerli satır, jquery datatable eklentisi ile nasıl silinir
- 16. Nesne/satır jquery ile nasıl silinir (form sonrası)
- 17. jqgrid satırları nasıl silinir
- 18. Balıkta yeni satır yazdır (programlama dili)?
- 19. Destek kitaplığından bir GridLayout programlama yoluyla programlı olarak oluşturma
- 20. Erişim <beyan-styleable> kaynaklar programlama yoluyla
- 21. iOS - programlama yoluyla şu anda programlama anda yerli Müzik App oynanan Sıraya almak isteyen
- 22. Paketten veya işlevden nasıl silinir?
- 23. basitçe async yöntemini durdurma
- 24. Fotoğraf çekimi "basitçe" çalışmıyor
- 25. Mysql içinde INNER JOIN kullanarak iki tablodaki satırlar nasıl silinir?
- 26. Firebase'den girişler nasıl silinir
- 27. dat.GUI öğesi nasıl silinir?
- 28. Varsayılan kurucu nasıl silinir?
- 29. onay kutusu nasıl silinir
- 30. Düğümlerin birçoğu nasıl silinir
sen/kullanmalısınız gerekir işaretçiler (Bu C++ kodu olduğunu varsayalım). – UmNyobe
removeWidget (myEdit) –