如何在SIGNAL中发送值

时间:2019-06-23 06:49:34

标签: qt qt5

我将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的值。

1 个答案:

答案 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