Subclassificação QUiloader e reimplementing createWidget função de
-
23-12-2019 - |
Pergunta
Eu precisava ler widget de nomes de classes, nomes, etc a partir da gui carregados através QUiloader.E eu tenho aqui a resposta que eu precisava subclasse QUiloader e reimplementar o seu método.
Eu tenho MainWindow, e através de menu/barra de ferramentas de eu carregar o arquivo, e mostrá-lo.E quando eu carga que eu quero saber quais os elementos que estão na interface gráfica para trabalhar com eles.O código que eu recebi de um usuário aqui:
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;
}
};
Eu usei Uiloader para carregar o arquivo.E ele está funcionando.
A minha questão agora é como eu interceptar createWidget antes de retornar widget, eu quero obter a lista de widget e, em seguida, retornar Widgets.Eu não sei como que é a maneira mais eficiente para criar uma lista tão simples como esta:0=>Caixa De Texto, 1=>Botão ...Eu realmente não me importo sobre a estrutura eu só preciso saber o que vem primeiro e o que ele é.
Obrigado.
Solução
Eu não reimplementar carregador de classe em todos honestamente..Pode ser apenas se você precisar 'injetar' algo em código existente que utilize QUiLoader muito..mas em geral a única coisa que você precisa:
pWidget = ...->createWidget(...);
QList<QWidget *> widgets = pWidget->findChildren<QWidget *>();
aqui você vá, seu e-widgets contém uma lista de todos os componentes de formulário..