Qt:如何使用registerField()在QWizardPages之间传递变量值
Qt: How to pass variable value betweeen QWizardPages with registerField()
我正在研究Qt 4.8.5。我使用QWizard结构及其QWizardPages(让我们将它们命名为wp1、wp2、wp3…)。我需要从wp2向wp4传递一个值,但每次尝试时,我都会得到一个空字符串:(我需要的值在一个变量(QString sVar;)上,所以不是一个小部件,我已经尝试了一些东西:
- 将RegisterField与wizardpage一起使用(因为它仍然是一种qwidget),如下所示:
registerField("myField",this);
,但当然,当我转到wp4并尝试qDebug()<< "data: " << field("myField").toString();
时,它是空的 - 我在一些论坛上看到有人说,你可以创建一个Q_PROPERTY,然后使用register字段。我把它设置为
Q_PROPERTY sData READ getData() WRITE setDATA()
,然后用registerField("myfield, this, ...
,这里我有一个问题,因为我希望sData会出现,但它没有
所以。。。关于如何使用registerField实现这一点的任何想法(我知道我也可以创建自己的插槽和信号,从wp2发出并在wp4上赶上它,但如果可能的话,我想避免它)
添加了解决方案:
A.h级:
class ClassA: public QWizardPage
{
Q_OBJECT
Q_PROPERTY(QString sAP READ getAP WRITE setAP)
....
public:
QString getAP() const {return AP;}
void setAP(QString s){AP=s;};
private:
QString AP;
A类构造函数:
registerField("AP_field",this, "sAP", SIGNAL(APChanged()));
A类::initializePage()函数:
switch(m_iVar)
{
case 0 :...
break;
case 1:
setAP("AP1");
emit APChanged();
break;
}
然后在B类(你需要知道数据的地方):
qDebug() << " AP QPROPERTY = " <<field ("AP_Field").toString();
根据文档:
当我们使用QWizardPage::registerField()创建字段时,我们传递唯一的字段名和一个小部件。我们还可以提供Qt属性名称以及"更改"信号(当属性变化)作为第三和第四自变量;但是,这不是必须的用于最常见的Qt小部件,如QLineEdit、QCheckBox和QComboBox,因为QWizard知道要查找哪些属性。
所以你仍然需要一个信号,但Qt会为你处理必要的连接,并在你更改它时捕获你的新值。你必须这样注册:
registerField("myField", this, "myProperty", SIGNAL(myPropertyChanged()));
然后,您必须记住每次更改变量时都要发出信号,当然还要将其注册为属性。
这适用于一些但不是所有发出信号的小部件。对于QDoubleSpinWidgets,QWizard::setDefaultProperty("QDoubleSpinBox", "value", SIGNAL(valueChanged(double)));
这是因为值Changed()用于QString和double。。。。不知道在没有指定参数的情况下要取哪个值:"每次值更改时,QDdoubleSpinBox都会发出两个valueChanged()信号,一个提供double,另一个提供QString。QString重载为值提供前缀()和后缀()。当前值可以用value()获取,也可以用setValue()设置。"doc.qt.io/qt-5/QDoubleSpinBox.html我希望这永远不会困扰其他人,希望这个完整的解决方案没有任何警告,错误或不可预测的行为。
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- Qt:如何使用registerField()在QWizardPages之间传递变量值
- 在QWizardPages之间传递变量