我有一个继承自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();
}
答案 0 :(得分:1)
根据QWizardPage文档在使用QLineEdit注册字段时,默认情况下包含textChanged()SIGNAL。这意味着每次在QLineEdit中写入时,它的字段值都会自动更新。在你的代码中,你只需要使用field(“input”)。toString()来获取值。
答案 1 :(得分:0)
您可以在页面上添加新项目,并在registerField()
构造函数中使用QWizardPage
函数。在外面,您可以使用field()
和setField()
。在QWizardPage
构造函数中使用这些函数是不合逻辑的,因为您可以访问新项目(input
和output
)。
要检查功能field()
和setField()
,只需在wizard
创建后尝试使用它:
MyWizard wizard;
wizard.setField("output", field("input"));