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.

Foi útil?

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..

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top