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

标签 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();
     QMessageBox msg;

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

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

最佳答案

创建QUiLoader的子类,并重新实现createWidget , createLayoutcreateAction (还有 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 - 如何从 .ui 文件中读取 qt5 中的小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21573359/

相关文章:

c++ - Qwt 重新缩放轴

c++ - 运行函数时控制台无输出显示

c++ - QSerialPort 仅在第二次打开后才能正确读取

c++ - Qt 的设计问题

qt - QtDesigner 中的重叠小部件

python - 使用 Qt Designer 在 PySide2 中实现信号/槽时出错

c++ - 如何从一个线程的结果中返回一个 Qt 对象 (Qtfutur)

c++ - 无法引用另一个插件中的方法

ftp - Qt 5.0 添加QFtp

python - 如何连接 Qt Designer 创建的单独的 UI 文件?