【问题标题】:How to read widgets from the .ui file in qt5?如何从 qt5 中的 .ui 文件中读取小部件?
【发布时间】:2014-02-07 04:49:25
【问题描述】:

我正在尝试从 .ui 文件中获取小部件列表。 所以这里有一些代码:

    QUiLoader loader;
     QFile file(fname);
     file.open(QFile::ReadOnly);
     QWidget *myWidget = loader.load(&file, this);
     file.close();

     QStringList avlb_wd = loader.availableWidgets();
     QMessageBox msg;

     foreach (const QString &str, avlb_wd)
     {
        msg.setText(str);
        msg.exec();
     }

但正如我所见,availableWidgets() 为我提供了所有小部件,而不是 .ui 文件中的小部件。 我怎样才能实现它? 谢谢转发。

【问题讨论】:

    标签: qt qt5 qt-designer


    【解决方案1】:

    创建QUiLoader 的子类,并重新实现createWidgetcreateLayoutcreateAction(还有createActionGroup,但它不再真正受支持,除非您手动编辑ui 文件)。

    每当 ui 加载器创建新的小部件、布局或操作时,都会调用这些函数。所以只需调用基类实现来获取创建的对象,然后您可以在返回之前收集您喜欢的任何信息。

    更新

    所以基本的 QUiLoader 子类看起来像这样(根据需要添加其他重载):

    class UiLoader : public QUiLoader
    {
       Q_OBJECT
    public:
       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);
          // do stuff with className, name, widget, etc
          return widget;
       }
    };
    

    【讨论】:

    • 嗨,我对 Qt 环境很陌生。你能告诉我如何制作子类和重新实现上述功能吗?或者将我链接到可以找到如何操作信息的文档?一些例子真的很有帮助。还是谢谢。
    • @user3185491。我添加了一些代码来帮助您入门,但实际上,这只是非常基本的 C++ 内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    相关资源
    最近更新 更多