Накануне делаю простенькое приложение, а именно график на кривые Лиссажу. Почти все сделал, но остаётся маленькая загвоздка.
class LissageFunction : public QObject
{
Q_OBJECT
public:
LissageFunction(QObject *obj = 0);
void setFunction(double wa, double wy, double w1, double w2);
double getWx();
double getWy();
double getW1();
double getW2();
void setFunctionInPoints();
QVector<QPointF> getFunctionInPoints();
private:
double Wx;
double Wy;
double W1;
double W2;
QVector<QPointF> function;
public slots:
void setValueWx(double wx){ this->Wx = wx; emit changeFunction()};//пример
void setValueWy(double);
void setValueW1(double);
void setValueW2(double);
signals:
void changeFunction();
};
В общем, есть класс на кривые лиссажу, отдельный виджет, который представляет координатную сетку и 4 отдельных QSpinBox-кса для параметров Wx, Wy, W1, W2 - которые как предполагается должны регулировать эти уравнения:
x(t) = sin(Wx * t + W1); y(t) = sin(Wy * t + W2);
Я, допустим регулирую значения и посылаю сигнал
QSpinBox *Wx = new QSpinBox;
connect(Wx,SIGNAL(valueChanged(int)),LissageFunction,SLOT(setValueWx(double)));
(далее в теории я просто высылаю сигнал об изменении значения, и слот из виджета графика перерисовывает из переопределенной функции paintEvent;)
Я не до конца понимаю механизм сигналов и слотов, а из учебника Шлее слишком примитивные или готовые примеры их взаимодействия между виджетами.
Я правильно понимаю, что нужно отдельно наследовать Спинбоксы и определять свои сигналы для моего класса или сигнал valueChanged(int) как-то неявно передает слоту значение? Если да, то как обработать его в сигнале setValueWx(double), чтобы изменить значение переменной
Нашел одно решение, чтобы понять, от какого сигнала спинбокса пришло значение и изъять его значение, можно этой строкой
int x = ((QSpinBox*)sender())->value();
В описываемом слоте.
P.S значения в сигналах передаются слоту явно, поэтому можно обрабатывать прямо из параметра слота без выше написанной функции. А так же, что бы сигнал и слот имел исключительно одинаковый тип, без int -> double, как это было у меня.
Здравствуйте возник вопрос в синхронизации отдельной части приложения, вот пример:
Объясните, пожалуйста, как производится запись? Есть файл с такими строками:
Нужно создать функцию, добавление элементов в очередь, выводится ошибка:"Выражение должно быть допустимым для изменение левосторонним значением"...