2011-04-13 23 views
9

Şu anda okulum için bir Qt projesi üzerinde çalışıyorum. Bu proje için, içeriği yeniden boyutlandırmadan bir pencerede bilinmeyen sayıda öğe listelemem gerekiyor.Hangi Qt Widget widget'larda gezinebilir?

Geçmişte bazı VBoxLayout kullandım, ancak aradığım şey bu değil. Bu widget, içerdiği öğelerin sayısına bağlı olarak içeriğini yeniden boyutlandırır. İstediğim şey, bir diğerine otomatik olarak yığılacak ve yeniden boyutlandırmayacak olan "kaydırma widget'ına" ihtiyacım olan kadar widget eklemek.

QScrollArea kullanmayı denedim, ancak birbirlerinin üzerine öğe yığını oluşturamadım. Ben QVBoxLayout ile bunu nasıl İşte enter image description here

cevap

2

görünen elemanları ise basit, en kolay çözüm bir QListWidget. Bu, öğeleri otomatik olarak yeniden boyutlandıracak ve öğeleri eklediğinizde QScrollArea bildirecektir. Yeni öğeler eklemek için myScrollAlrea -> setWidget (myListWidget)'u aramanız ve ardından myListWidget -> addItem (myListWidgetItem)'u aramanız yeterlidir.

10

ve bir QScrollArea: Sonra

böyle yapmak öğeleri ekleyerek (ile Burada

sorunumu açıklayan küçük bir şekildir lay = techArea->layout() ve parent = techarea:

for(std::set<Event::Enum>::iterator it = validEvents.begin(); it != validEvents.end(); 
    ++it){ 
     QCheckBox* chk = new QCheckBox(
     "text", parent); 

     if(lay){ 
      lay->addWidget(chk); 
     } 

    } 
2

RedX cevabı biraz belirsiz, ama onun yöntem işe aldı:

QRadioButton *radio[40]; 

for (int i = 0;i<40;i++) 
    radio[i] = new QRadioButton(tr("&Radio button 1")); 

QWidget* techArea = new QWidget; 
techArea->setObjectName("techarea"); 
techArea->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); 
techArea->setLayout(new QVBoxLayout(techArea)); 
ui->scrollArea->setWidget(techArea); 

QLayout *lay = techArea->layout(); 

for (int i = 0;i<40;i++) 
    lay->addWidget(radio[i]); 
+0

yok kaydırma alanı? – Trilarion