Qt с использованием параметра сигнала

Я создал сигнал, который испускается, когда пользователь вводит что-то (число) в поле qlineedit, сигнал испускается с параметром (число, которое пользователь просто вводит в поле). И я хотел бы использовать этот параметр как обычное число (в переменной). Я пытаюсь добавить этот параметр сигнала к другому числу, и у меня возникла ошибка «s1 не объявлен». Вот мой класс в файле .h и его реализация в файле .cpp

файл .h

class fenetre: public QWidget
{
Q_OBJECT
public:
    fenetre();

public slots:
    void calc();
    void clearinput();

signals:
    void thesecond(int s1);

private:
    QPushButton *button1;
    QPushButton *button2;
    QPushButton *button3;
    QPushButton *button4;
    QPushButton *button5;
    QPushButton *result0;
    QPushButton *clear;
    QLineEdit *input1;
    //QLineEdit *inputsqrt;
    //QLineEdit *input2;
    //QLineEdit *result;
    //QLineEdit *square;
};

файл .cpp

QObject::connect(button1,SIGNAL(clicked()),this,SLOT(calc()));
    //QObject::connect(button2,SIGNAL(clicked()),this,SLOT(calc()));
    //QObject::connect(button3,SIGNAL(clicked()),this,SLOT(calc()));
    //QObject::connect(button4,SIGNAL(clicked()),this,SLOT(calc()));
    //QObject::connect(button5,SIGNAL(clicked()),this,SLOT(calc()));
    //QObject::connect(clear,SIGNAL(clicked()),this,SLOT(clearinput()));

    //QObject::connect(result0,SIGNAL(clicked()),this,SLOT(calc()));

    QObject::connect(result0,SIGNAL(thesecond(int)),this,SLOT(calc()));


}





void fenetre::calc()
{
    QString s=input1->text();
    bool ok;
   if(!input1->text().isEmpty())
   {
       int s1=s.toInt(&ok,10);
       emit thesecond(s1);
       input1->clear();
   }

   QObject* obj=sender();
   if(obj==result0)
   {
       int s2=s.toInt(&ok,10);
       int A=s2+thesecond(s1);
        input1->clear();
        QString c=QString::number(A);
        input1->setText(c);
   }
}

person Barbell    schedule 29.04.2017    source источник


Ответы (1)


Ваш код не имеет смысла.

calc() не передает параметр. Вы не можете использовать s1 в calc(). Есть один, который вы объявляете в первом операторе if, но поскольку он объявлен в блоке, он выходит за рамки после блока. Затем вы используете сигнал как функцию с возвращаемым типом, что довольно странно, учитывая, что сам сигнал объявлен с возвращаемым типом void. Сигналы в Qt могут возвращать значения, но это крайне редко используется, и для того, чтобы это работало, ему действительно нужно возвращать значение.

QPushButton не имеет сигнала thesecond(int s1). Последний оператор соединения не работает. Вы даже не проверяете, так ли это.

Если мы предположим, что в последнем соединении вы хотели сказать this вместо result0, то в итоге вы получите кнопку, соединенную с calc(), которая излучает сигнал, соединенный с... calc() снова!

В общем, ваш код концептуально совершенно неверен, и вы, похоже, не понимаете, что делаете. Кроме того, вы, возможно, захотите немного узнать о правильных соглашениях о кодировании, потому что этот код ужасен.

Я предлагаю вам отредактировать вопрос и подробно объяснить, что вы на самом деле хотите, потому что сейчас ваше намерение остается загадкой. Судя по другим вашим вопросам, определенно похоже, что вы забегаете вперед, вернитесь назад и изучите больше, прежде чем пытаться его использовать. Вам будет очень плохо с программированием, если вы понятия не имеете, что делаете. Существует огромная разница между совершением случайных ошибок и непониманием того, что вы делаете, первое — это тематика этого сайта, второе — нет.

person dtech    schedule 29.04.2017