我正在尝试从 .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 , createLayout和 createAction (还有 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/