Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从qt5中的.ui文件中读取小部件?_Qt_Qt5_Qt Designer - Fatal编程技术网

如何从qt5中的.ui文件中读取小部件?

如何从qt5中的.ui文件中读取小部件?,qt,qt5,qt-designer,Qt,Qt5,Qt Designer,我正在尝试从.ui文件中获取小部件列表。 下面是一些代码: QUiLoader loader; QFile file(fname); file.open(QFile::ReadOnly); QWidget *myWidget = loader.load(&file, this); file.close(); QStringList avlb_wd = loader.availableWidgets(); QMessag

我正在尝试从.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文件中的小部件。 我怎样才能做到呢?
谢谢转发

创建
QUiLoader
的子类,并重新实现,和(还有,但实际上不再支持,除非手动编辑
ui
文件)

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

更新

因此,基本的QUiLoader子类如下所示(根据需要添加其他重载):


嗨,我对Qt环境很陌生。你能告诉我如何制作子类和重新实现上述功能吗?或者将我链接到文档,在那里我可以找到如何操作的信息?一些例子会很有帮助。谢谢。@user3185491。我添加了一些代码来启动,但实际上,它只是非常基础的C++程序。
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;
   }
};