获取向导中已注册字段的指针

时间:2014-02-27 17:48:08

标签: qt

我可以访问QWizardPage中的注册字段小部件吗?

QLineEdit* fld = new QLineEdit;

// register
registerField( "test", fld );
....
// Somewhere in wizard
QLineEdit* field = ?

2 个答案:

答案 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的子类,请尝试创建自己的“阴影”字段映射。

相关问题