【问题标题】:Subclassing QUiloader and reimplementing createWidget function of it继承 QUiloader 并重新实现它的 createWidget 函数
【发布时间】:2014-03-31 00:30:24
【问题描述】:

我需要从通过 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=>文本框,1=>按钮,... 我真的不关心结构,我只需要知道哪个先出现,它是什么。

谢谢。

【问题讨论】:

    标签: qt qt-creator qtgui


    【解决方案1】:

    老实说,我根本不会重新实现类加载器。可能只有当您需要将某些东西“注入”到经常使用 QUiLoader 的现有代码中时。但通常只有您需要的东西:

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

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

    【讨论】:

    • 重新实现是指子类化?我为什么要这样做?
    • 是的,我的意思是你不需要继承 QUiLoader 来获取新创建的表单上的小部件内容。
    • 但是使用上面的方法,我不能得到pWidget的类名,objectname()方法给出的名字不一定是那个对象的类名。那么如何从小部件中获取 (QPushbutton, QLineEdit ...) 的列表?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2012-04-22
    • 2012-12-12
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多