Qt的向导registerField,setField和field方法如何工作?

时间:2015-01-27 12:10:05

标签: c++ qt wizard

我有一个继承自QWizardPage的类,它使用registerField()注册其小部件。

QLineEdit* input = new QLineEdit;
input->setText("Hello");
QLineEdit* output = new QLineEdit;

QFormLayout* layout = new QFormLayout;
layout->addRow("Input", input);
layout->addRow("Output", output);
setLayout(layout);

registerField("input", input);
registerField("output", output);

然后我希望能够使用field()setField()来获取和设置值,但我无法让它工作。

setField("output", field("input"));

设置输出QLineEdit的text属性。有什么想法是什么问题? (我的理解可能,但为什么不起作用?)。 field("input")返回带有未指定类型的QVariant(我希望返回"Hello"字符串。

完整代码:

#include <QApplication>
#include <QDialog>
#include <QWizard>
#include <QWizardPage>
#include <QLineEdit>
#include <QFormLayout>

class MyWizard : public QWizard
{
public:
   MyWizard();
};

class MyWizardPage : public QWizardPage
{
public:
   MyWizardPage();
};

MyWizardPage::MyWizardPage()
{
   QLineEdit* input = new QLineEdit;
   input->setText("Hello");
   QLineEdit* output = new QLineEdit;

   QFormLayout* layout = new QFormLayout;
   layout->addRow("Input", input);
   layout->addRow("Output", output);
   setLayout(layout);

   registerField("input", input);
   registerField("output", output);
   setField("output", field("input"));
}

MyWizard::MyWizard()
{
   addPage(new MyWizardPage);
}

int main(int argc, char** argv)
{
   QApplication application(argc, argv);
   MyWizard wizard;
   return wizard.exec();
}

2 个答案:

答案 0 :(得分:1)

根据QWizardPage文档在使用QLineEdit注册字段时,默认情况下包含textChanged()SIGNAL。这意味着每次在QLineEdit中写入时,它的字段值都会自动更新。在你的代码中,你只需要使用field(“input”)。toString()来获取值。

答案 1 :(得分:0)

您可以在页面上添加新项目,并在registerField()构造函数中使用QWizardPage函数。在外面,您可以使用field()setField()。在QWizardPage构造函数中使用这些函数是不合逻辑的,因为您可以访问新项目(inputoutput)。

要检查功能field()setField(),只需在wizard创建后尝试使用它:

MyWizard wizard;
wizard.setField("output", field("input"));