Pregunta

Necesitaba leer nombres de clase de widget, nombres, etc. de GUI cargados a través de Quiloader. Y recibí una respuesta aquí que necesitaba para subclase Quiloader y reembolsar su método.

Tengo MainWindow, y a través de Menú / Barra de herramientas cargué el archivo, y mostrarlo.Y cuando carga, quiero saber qué elementos están en esa GUI para trabajar más con ellos. El código que obtuve de un usuario aquí:

class UiLoader : public QUiLoader
{
    Q_OBJECT
public:
QStringList *wlist;
UiLoader(QObject *parent = 0) : QUiLoader(parent) {}

virtual QWidget* createWidget(const QString &className, QWidget *parent =0, const   QString &name = QString())
{
    QWidget* widget = QUiLoader::createWidget(className, parent, name);
    //here do my stuff with className, parent, name
    return widget;
}
};

Usé Uiloader para cargar mi archivo.Y está funcionando.

Mi pregunta ahora es cómo intercepto a CreateWidget antes de devolver el widget, quiero obtener la lista de widgets y luego devolver los widgets. No sé cómo cuál es la forma eficiente de crear una lista tan simple como esta: 0=> TEXTBOX, 1=> BOTÓN, ... Realmente no me importa la estructura, solo necesito saber cuál es el primero y lo que es.

gracias.

¿Fue útil?

Solución

No reemplificaría la cargadora de clase con todo sinceramente. Puede ser solo si necesita "inyectar" algo en el código existente que usa un montón de quiloader, pero en general, solo lo necesitas:

 pWidget = ...->createWidget(...);

 QList<QWidget *> widgets = pWidget->findChildren<QWidget *>();

Aquí está usted, sus widgets contienen la lista de todos los componentes del formulario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top