Qt中的新SIGNAL将不会被发出

时间:2013-08-12 04:34:50

标签: c++ qt emit

我写了这段代码 一个QWidget,它有一个QSlider和QLineEdit 它们的价值相互联系。有两个新的SLOT将转换它们的值,并将调用其他小部件来更改其值。 一直到这里,一切都很完美。

但是我添加了一个新的SIGNAL,当值达到80时必须进行emmited。之后必须关闭QAPPlication的实例。这部分不起作用。为什么呢?

#include "windows.h"
#include <QSlider>
#include <QLineEdit>
#include <QGridLayout>
#include <QApplication>
windows::windows(QWidget *parent) :
    QWidget(parent)
{
    sld=new QSlider(Qt::Horizontal,this);
    sld->setRange(0,100);
    led= new QLineEdit(this);
    QGridLayout *grid=new QGridLayout(this);
    grid->addWidget(sld,0,0);
    grid->addWidget(led,0,1);
    connect(led,SIGNAL(textEdited(QString)),this,SLOT(setSlider(QString)));
    connect(sld,SIGNAL(valueChanged(int)),this,SLOT(setLed(int)));
    connect(sld,SIGNAL(reached()),QApplication::instance(),SLOT(quit()));
}

void windows::setSlider(QString value)
{
    int intValue=value.toInt();
    sld->setValue(intValue);
    if(intValue>80)
        emit reached();
}

void windows::setLed(int value)
{
    QString Qvalue=QString::number(value);
    led->setText(Qvalue);
    if(value>80)
        emit reached();
}

1 个答案:

答案 0 :(得分:0)

我真是个傻瓜, reach()未在sld中声明,它是Windows中的SIGNAL,然后它将不会从sld连接, 它应该是这样的:

连接(在此,SIGNAL(达到()),的QApplication ::实例(),SLOT(退出()));