2010-06-07 24 views
6

Diğer gereçler ve düzenler içeren general_layout adlı QLayout ve QLayout numaralı bir QLayout olduğunu düşünelim. general_layout böyle QWidget düzen olarak ayarlanır:Qt - QWidget düzenini değiştirin

setLayout(general_layout) 

Şimdi gerektiğini QWidget içeriğini değiştirmek için. Bunu nasıl yapabilirim? QWidget için yeni bir düzen ve QWidget düzeni olarak ayarlanan yeni bir düzen oluşturmaya çalıştım, ancak hedeflerimi başarıyla tamamlayamadım.

delete general_layout; 
general_layout = new QHBoxLayout; 
general_layout->addLayout(some_layout); 
myQWidget->setLayout(general_layout); 
+0

Eğer sorun hakkında daha açık olabilir misin bir

qDeleteAll(myQWidget->children()); 

sonra ekleyin? Yaptığınız şey doğru gibi görünüyor (eski bir düzeni ayarlamadan önce eski düzeni silin). – Job

+0

Elbette! Aşağıdakileri yapıyorum: delete general_layout; general_layout = new QHBoxLayout; general_layout-> addLayout (some_layout); myQWidget-> setLayout (general_layout); – Narek

cevap

11

sorun bir düzen silerken bir düzen widget tahrip olmamasıdır:

Bu

benim kodudur. Bu, myQWidget öğesinin tüm alt öğeleriyle birlikte, bir düzen olmadan da var olmaya devam eder.

çözüm basit:

delete general_layout; 
+0

Sorun buydu. Çok teşekkürler!!! Sadece bir soru daha var. Yapısını değiştiren bir diyaloğa sahip olmak istiyorum (bu sorunun yanında). Bu yüzden düzen oluşturma, silme ve yeni bir tane oluşturma ile yapıyorum. Bu iyi bir yaklaşım mı? – Narek

+4

Artık ilk yapıya ihtiyacınız yoksa olabilir. Eğer yaparsanız, QStackedLayout (http://doc.trolltech.com/latest/qstackedlayout.html) kullanmak çok daha kolay. Sihirbaz gibi bir şeyi uygulamaya çalışıyorsanız, QWizard'a (http://doc.trolltech.com/latest/qwizard.html) bir göz atın. – Job

+0

qDeleteAll (myQWidget-> children()); fonksiyon tüm çocukları siler, ama çocukların çocuğu ne olur? MyQWidget öğesinin çocuk öğeleri içinde genel_layout'un alt düzeni olan düzenler yoktur. General_layout'un bir çocuk düzeni yöntemini çağırdığımda, uygulamam patlar (bu nedenle işaretçiyi yok ederim), ancak 0'a eşit olup olmadığını kontrol ettiğimde (m_childLayout_of_General_Layout == 0), ifade göz ardı edilirse. Sorun ne? Silindi mi, yok mu? – Narek