2011-04-13 19 views
9

Actualmente estoy trabajando en un proyecto de Qt para mi escuela. Para este proyecto, necesito enumerar una cantidad desconocida de elementos en una ventana sin cambiar el tamaño de su contenido.¿Qué widget Qt desplaza a través de widgets?

He usado algunos VBoxLayout en el pasado, pero no es lo que estoy buscando en absoluto. Este widget cambia el tamaño de su contenido en función de la cantidad de elementos que contiene. Lo que me gustaría es agregar tantos widgets como necesite al "widget de desplazamiento", que se apilarán uno junto al otro automáticamente y no cambiarán de tamaño.

Intenté usar QScrollArea pero no pude hacer la acumulación de elementos en los demás.

Aquí es un pequeño dibujo que explica mi problema: enter image description here

Respuesta

2

Si los elementos de visualización son simples, la solución más fácil es un QListWidget. Esto se redimensionará automáticamente e informará al QScrollArea cuando agregue elementos. Solo tiene que llamar al myScrollAlrea -> setWidget (myListWidget) para inicializar, y luego myListWidget -> addItem (myListWidgetItem) para agregar nuevos elementos.

10

Aquí es cómo lo hago con un QVBoxLayout y una QScrollArea:

Luego, cuando la adición de elementos que hacerlo de esta manera (con lay = techArea->layout() y 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

respuesta de RedX era un poco vago, pero tiene su método funcione:

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

Sin área de desplazamiento? – Trilarion

Cuestiones relacionadas