Qt使用信号的参数

时间:2017-04-29 21:24:30

标签: qt int qt-signals

我创建了一个信号,当用户在qlineedit字段中输入某个(数字)时发出该信号,该信号以参数(用户只在该字段中键入的数字)发出。我想将该参数用作常规数字(在变量中)。我试图将该信号参数添加到另一个数字,我有一个错误“s1未声明”。这是我在.h文件中的类及其在.cpp文件中的实现

the.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;
};

the.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);
   }
}

1 个答案:

答案 0 :(得分:0)

您的代码没有意义。

Please enter the amount of circles you wish to test: 15 Circle('s) Radius Given Calculated Area ---------- --------------- --------------- 1 1 3.14159265359 2 2 12.5663706144 3 3 28.2743338823 4 4 50.2654824574 5 5 78.5398163397 6 6 113.097335529 7 7 153.938040026 8 8 201.06192983 9 9 254.469004941 10 10 314.159265359 11 11 380.132711084 12 12 452.389342117 13 13 530.929158457 14 14 615.752160104 15 15 706.858347058 未传递参数。您在calc()中无法使用s1。您在第一个calc()语句中声明了一个,但由于它在块中声明,因此它在块之后超出范围。然后你将信号用作具有返回类型的函数,这有点奇怪,考虑到信号本身是用if返回类型声明的。 Qt中的信号可以返回值,但是极少使用它,并且它必须实际返回一个值才能工作。

void没有QPushButton信号。最后一个连接语句失败。你甚至不检查它是否。

如果我们假设在最后一个连接中您想说thesecond(int s1)而不是this,那么您最终得到的是一个连接到result0的按钮,它发出一个信号,已连接再次...... calc()

总而言之,您的代码在概念上完全错误,而您似乎并不知道自己在做什么。此外,您可能希望了解正确的编码约定,因为该代码非常糟糕。

我建议你编辑问题并仔细解释你真正想要发生的事情,因为现在的方式,你的意图是个谜。从你的其他问题来看,你看起来肯定会超越自己,在尝试使用它之前回去做更多的学习。如果您不知道自己在做什么,那么编程将会非常糟糕。偶尔出错并且不知道你在做什么之间有很大的区别,前者是这个网站的范围,第二个不是。