Question

I needed to read widget classnames, names etc from gui loaded via QUiloader. And I got answer here that I needed to subclass QUiloader and reimplement its method.

I have MainWindow, and via menu/toolbar I load the file, and show it. And when I load I want to know what elements are in that gui to work further with them. The code I got from a user here:

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;
}
};

I used Uiloader to load my file. And it is working.

My question now is how I intercept createWidget before returning widget, I want to get the list of widget and then return Widgets. I do not know how what is the efficient way to create a list as simple as this one: 0=>TextBox, 1=>Button, ... I really do not care about the structure I just need to know which one comes first and what it is.

Thanks.

Was it helpful?

Solution

I wouldn't reimplement class loader at all honestly.. May be only if you need to 'inject' something into existing code which use QUiLoader a lot.. but in general only thing you need:

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

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

here you go, your widgets contains list of all form components..

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top