【问题标题】:new SIGNAL in Qt won't be emitted不会发出 Qt 中的新信号
【发布时间】:2013-08-12 04:34:49
【问题描述】:

我已经写了这段代码 具有 QSlider 和 QLineEdit 的 QWidget 它们以其价值相互联系。有两个新的 SLOT 将转换它们的值并调用其他小部件来更改其值。 到这里为止,一切正常。

但是我添加了一个新的 SIGNAL,当值达到 80 时必须发出它。然后必须关闭 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();
}

【问题讨论】:

  • bool 成功 = connect(sld,SIGNAL(reached()),QApplication::instance(),SLOT(quit()));并检查是否成功 == true?

标签: c++ qt emit


【解决方案1】:

我真是个笨蛋, sld 中没有声明达到(),它是 windows 中的一个信号,然后它不会从 sld 连接, 应该是这样的:

connect(this,SIGNAL(reached()),QApplication::instance(),SLOT(quit()));

【讨论】:

  • 只有您在此处发布的部分代码才能解决问题:P
  • 从现在开始,请发布 SSCCE 以获得快速解决方案 :) sscce.org 希望这会有所帮助
  • 我认为提供的信息就足够了,因为它包含一个包含类原型的标题,它不是必需的,它是一个非常小的实际示例,但无论如何谢谢:) @SanyamGoel跨度>
猜你喜欢
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多