Sottociassante Quiloader e reimplementing La funzione di Createwidget di esso
-
23-12-2019 - |
Domanda
Avevo bisogno di leggere i classnam portatili, i nomi ecc. Dalla GUI caricata tramite Quiloader. E ho ricevuto risposta qui che avevo bisogno di sottoclasse Quiloader e reimplementare il suo metodo.
Ho Mainwindow, e tramite menu / barra degli strumenti Carico il file e mostralo.E quando carico voglio sapere quali elementi sono in quella GUI per lavorare ulteriormente con loro. Il codice che ho ricevuto da un utente qui:
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;
}
};
.
Ho usato uiloader per caricare il mio file.E sta funzionando.
La mia domanda ora è come intercetto CreateWidget Prima di restituire il widget, voglio ottenere l'elenco dei widget e quindi restituire i widget. Non so come è il modo efficiente per creare un elenco semplice come questo: 0=> TextBox, 1=> Pulsante, ... Non mi interessa davvero la struttura che ho solo bisogno di sapere quale viene prima e cos'è.
Grazie.
Soluzione
Non sarei reimplement il caricatore della classe a tutto onestamente .. potrebbe essere solo se è necessario "iniettare" qualcosa nel codice esistente che usa il Quiloader molto .. ma in generale solo la cosa di cui hai bisogno:
pWidget = ...->createWidget(...);
QList<QWidget *> widgets = pWidget->findChildren<QWidget *>();
.
Qui vai, i tuoi widget contiene elenco di tutti i componenti del modulo ..