• 6405阅读
  • 2回复

对于信号和槽的一个问题 [复制链接]

上一主题 下一主题
离线lophyxp
 

只看楼主 倒序阅读 楼主  发表于: 2007-06-28
— 本帖被 XChinux 执行加亮操作(2008-07-18) —
最近在学习qt tutorial。今天学习到了t7,遇到点有点麻烦。
t7的lcdrange.cpp中,有两个成员函数是这样实现的

    LCDRange::LCDRange(QWidget *parent)
    :QWidget(parent)
    {
    QLCDNumber *lcd = new QLCDNumber(2);
    lcd->setSegmentStyle(QLCDNumber::Filled);

    slider = new QSlider(Qt::Horizontal);
    slider->setRange(0,99);
    slider->setValue(0);

    connect(slider, SIGNAL(valueChanged(int)),
    lcd, SLOT(display(int)));
    connect(slider, SIGNAL(valueChanged(int)),
    this, SIGNAL(valueChanged(int)));

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(lcd);
    layout->addWidget(slider);
    setLayout(layout);
    }

    void LCDRange::setValue(int value)
    {
    slider->setValue(value);
    }

而我做了两处修改

    LCDRange::LCDRange(QWidget *parent)
    :QWidget(parent)
    {
    QLCDNumber *lcd = new QLCDNumber(2);
    lcd->setSegmentStyle(QLCDNumber::Filled);

    slider = new QSlider(Qt::Horizontal);
    slider->setRange(0,99);
    slider->setValue(0);

    connect(slider, SIGNAL(valueChanged(int)),
    lcd, SLOT(display(int)));
    // connect(slider, SIGNAL(valueChanged(int)),
    // this, SIGNAL(valueChanged(int)));

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(lcd);
    layout->addWidget(slider);
    setLayout(layout);
    }

    void LCDRange::setValue(int value)
    {
    slider->setValue(value);
    emit valueChanged(value);
    }

结果LCDRange就不对外发送signal了。

哪位大侠能小弟解一下惑,解释一下为什么这里只能用connect连接两个SIGNAL。
使用emit就不行?
[ 此贴被XChinux在2008-07-18 14:03重新编辑 ]
离线wmhnq

只看该作者 1楼 发表于: 2007-07-01
很明显这是QT的机制,需要用connect连接,直接emit肯定行不通的.(我猜的,我也初学).-_-
离线XChinux

只看该作者 2楼 发表于: 2007-07-01
使用connect连接后,emit出去后,接收者才会进行处理
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个