我正在将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 的值。
我不完全确定你是否问这个简单的事情,但是是的,插槽可以接收信号的参数。否则信号参数将没有多大意义,现在它们会吗?
像这样的东西
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