我可以访问QWizardPage中的注册字段小部件吗?
QLineEdit* fld = new QLineEdit;
// register
registerField( "test", fld );
....
// Somewhere in wizard
QLineEdit* field = ?
答案 0 :(得分:2)
您可以为窗口小部件指定唯一的名称,然后在向导的子项中找到它。回想一下,小部件是QObjects。此技术适用于所有QObject,并不特定于向导,甚至不适用于小部件。
char const fieldName[] = "MyCoolField";
fld->setObjectName(fieldName);
...
QLineEdit * field = wizardPage->findChild<QLineEdit*>(fieldName);
if (field) {
...
}
答案 1 :(得分:1)
看起来QWizardPage
并不是真的用来做这个 - 这就是为什么field
函数只返回小部件的内容,而不是指向它的指针。
查看the source code for QWizardPage::registerField
,进入字段会很糟糕:它们存储在QWizardPrivate
类中,用于将QWizard类的私有实现与其公共接口隔离开来(有关此方法的更多信息,请参阅Qt's D-Pointer write-up。)
我不建议尝试弄清楚如何将QWizardPrivate
的内部实际暴露给您自己的代码。这是因为QWizardPrivate
存在的全部原因是允许Qt完全改变次要版本中的私有数据和实现,而不会影响编译代码 - 它是一个移动目标。
最简单的解决方案是在外部存储您自己的指向QLineEdit的指针(如果可能的话)。例如,如果您是QWizardPage的子类,请尝试创建自己的“阴影”字段映射。