Qt使用信号参数[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
};
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);
}
}
你的代码没有意义。
calc()
没有传递参数。没有s1
供你在calc()
使用。您在第一个if
语句中声明了一个,但由于它在块中声明,因此它在块之后超出范围。然后你将信号用作具有返回类型的函数,这有点奇怪,考虑到信号本身是用void
返回类型声明的。 Qt中的信号可以返回值,但是极少使用它,并且它必须实际返回一个值才能工作。
QPushButton
没有thesecond(int s1)
信号。最后一个连接语句失败。你甚至不检查它是否确实如此。
如果我们假设在最后一个连接中你想说this
而不是result0
,那么你最终得到的是一个连接到calc()
的按钮,它发出一个信号,再次连接到... calc()
!
总而言之,您的代码在概念上完全错误,而您似乎并不知道自己在做什么。此外,您可能想要了解正确的编码约定,因为该代码非常糟糕。
我建议你编辑问题并仔细解释你真正想要发生的事情,因为它现在的样子,你的意图是个谜。从你的其他问题来看,你看起来肯定会超越自己,在尝试使用它之前回去做更多的学习。如果您不知道自己在做什么,那么编程将会非常糟糕。偶尔出错并且不知道你在做什么之间存在巨大的差异,前者是这个网站的范围,第二个不是。
以上是关于Qt使用信号参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Qt:在QNetworkAccessManager中发送请求后连接信号[重复]