我正在尝试从.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文件中的小部件。 我怎样才能实现它? 谢谢你。
答案 0 :(得分:2)
创建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;
}
};