子类化QUiloader并重新实现它的createWidget功能

时间:2014-02-27 14:03:43

标签: qt qt-creator qtgui

我需要通过QUILoader加载来自gui的小部件类名,名称等。 我在这里得到答案,我需要继承QUiloader并重新实现其方法。

我有MainWindow,通过菜单/工具栏我加载文件并显示它。当我加载时,我想知道gui中的哪些元素可以与它们进一步协作。 我从这里得到的代码:

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

我用Uiloader加载我的文件。它正在发挥作用。

我现在的问题是如何在返回小部件之前拦截createWidget,我想获取小部件列表然后返回小部件。 我不知道创建列表的有效方法是什么,就像这个一样简单:    0 => TextBox,1 =>按钮,... 我真的不关心结构,我只需要知道哪一个是第一个,它是什么。

感谢。

1 个答案:

答案 0 :(得分:0)

我根本不会重新实现类加载器。可能只有当你需要在现有代码中“注入”一些东西时才会使用QUiLoader很多......但一般来说只需要你需要的东西:

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

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

在这里,您的小部件包含所有表单组件的列表..