2011-12-03 9 views
5

Uso repetidamente un par de QComboBox y QListWidget en un proyecto. Su interacción está muy acoplada: cuando se selecciona un elemento en el cuadro combinado, la lista se filtra de alguna manera. Estoy copiando todas las conexiones de señal y ranura entre estos dos widgets a través de la implementación de múltiples cuadros de diálogo que no creo que sea una buena idea.Combina múltiples widgets en uno en Qt

¿Es posible crear un widget personalizado, que contendrá estos dos widgets y tendrá todas las conexiones de señal y ranura en un solo lugar? Algo como el siguiente:

class CustomWidget 
{ 
    QComboBox combo; 
    QListWidget list; 

    ... 
}; 

Quiero utilizar este widget como un único widget.

Respuesta

11

La forma habitual de hacerlo es en la subclase QWidget (o QFrame).

class CustomWidget: public QWidget { 
Q_OBJECT 

CustomWidget(QWidget *parent) 
    : QWidget(parent) { 
    combo = new QComboBox(...); 
    list = new QListWidget(...); 
    // create the appropriate layout 
    // add the widgets to it 
    setLayout(layout); 
} 

private: 
    QComboBox *combo; 
    QListWidget *list; 

}; 

manejar todas las interacciones entre la lista y el combo en ese widget personalizado (mediante la conexión de las señales apropiadas a las ranuras correspondientes, posiblemente, la definición de sus propias ranuras para esto).

Luego expone el comportamiento/API de su widget personalizado a través de señales y ranuras dedicadas, posiblemente imitando las de la lista y/o el combo.

El tutorial Address book lo guía a través de todo eso, incluyendo la creación de un widget personalizado y la definición de señales y ranuras para él.

Cuestiones relacionadas