我将QVBoxLayout
作为参数传递给方法,并在运行时创建控件。
QDoubleSpinBox *test; // Global variable at the top of the cpp file
void Sph::CreateUI(QVBoxLayout* layout)
{
QDoubleSpinBox *PositionXSpinBox = new QDoubleSpinBox;
test = PositionXSpinBox;
PositionXSpinBox->setRange(-10000, 10000);
PositionXSpinBox->setSingleStep(1.0);
PositionXSpinBox->setValue(40);
layout->addWidget(PositionXSpinBox);
bool ok = QObject::connect(PositionXSpinBox, SIGNAL(valueChanged(double)),
this, SLOT( ParamChange()));
}
在当前情况下,我在.cpp文件的顶部声明了全局变量,例如在这种情况下,QDoubleSpinBox *test;
在ParamChanged
函数中,我正在更改类的私有变量。
void Sph::ParamChange()
{
this->fSegments = test->value();
this->isChanged = true;
}
1)是否可以在连接信号本身中发送PositionXSpinBox的值。
答案 0 :(得分:3)
我不确定是否要问这个简单的问题,但是可以,插槽可以接收信号的参数。否则,信号参数就没有多大意义了,现在可以了吗?
类似这样的东西
void Sph::ParamChange(double value)
{
this->fSegments = value;
this->isChanged = true;
}
还有这个
bool ok = QObject::connect(PositionXSpinBox, SIGNAL(valueChanged(double)),
this, SLOT( ParamChange(double)));
更现代的连接方式是使用新语法:
QObject::connect(PositionXSpinBox, &QSpinBox::valueChanged,
this, &Sph::ParamChange);
这是可取的,因为如果您在方法名称中输入错字,则会产生编译时错误。
请注意,如果这确实是您的问题,我强烈建议您了解Qt基础知识,例如:https://doc.qt.io/qt-5/signalsandslots.html