我正在尝试从.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文件中的那些。我怎样才能做到这一点?谢谢向前。
发布于 2014-02-05 18:56:27
创建一个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;
}
};https://stackoverflow.com/questions/21573359
复制相似问题