c++ - Qt 的向导 registerField、setField 和字段方法如何工作?

标签 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 的文本属性。任何想法是什么问题? (我的理解可能,但为什么它不起作用?)。 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();
}

最佳答案

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

关于c++ - Qt 的向导 registerField、setField 和字段方法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28170212/

相关文章:

c++ - 转换构造函数或复制构造函数

python - 使用 Python 的基于 Web 的向导

c# - Windows Phone 7 中 ViewModel 之间的通信

java - eclipse 中没有 java 项目选项

c++ - GetProcessID 与 GetThreadID

c++ - 将 3 维数组引用转换为 1 维数组

c++ - 队列的指针问题

multithreading - *** 检测到 glibc *** 双重释放或损坏 (fasttop) :

c++ - 使用 qprocess 运行 .exe

c++ - 带有 qt 的 Visual Studio 无法编译 gui 类