初学qt问个有关问题。有关qt的信号机制

初学qt问个问题。有关qt的信号机制
一个简单的例子。通过qt的设计器 里面有 1个edit 2个button 一个okbutton 一个cancelbutton 
有3个dlg。h和dlg。cpp  main。cpp
dlg。h文件如下

class dlg: pulic QDialog ,pulic Ui::togoDialog//togoDialog是设计器的ui**.h类

{
    Q_OJBECT
public:
    dlg(QWidget *parent=0);
private slots:
    void on_lineEdit_changed();

};

dlg.cpp 文件如下

dlg:dlg(QWidget *parent) :QDialgo(parent)
{
    setupUi(this);
    connect (okbutton,SIGNAL(clicked()),this,SLOT(accept()));
    connect (cannelbutton,SIGNAL(clicked()),this,SLOT(reject()));

//信号槽关联。

}


void dlg::on_lineEdit_textchanged()
{
    okbutton->setEnabled(Edit->hasAcceptableInput());
}
 
默认okbutton是false
这个程序。如果在edit中输入okbutton变成可用

问题是:okbutton 自己产生信号。自己接受。这个edit是如何和okbutton关联的呢。
如果是这个clicked是edit产生的。和okbutton 关联。那么这个on_linedit_textchanged()函数谁什么时候调用的。

就像mfc中的事件相应。我单击edit会有个消息相应。进入到消息相应的函数中。进行处理。这里面的edit控件的消息相应函数在那呢?

同样:我在cpp文件中加入另一个函数。同样也是在privaet slot中声明的为什么,当edit有输入的时候。没有message弹出呢?
void dlg::mesg()
{
    if(edit->hasAcceptableInput())
    {
       QMessage:....
     }
}

谢谢了!!!
------解决方案--------------------
你是不是不知道这个槽函数:on_lineEdit_textchanged()是在什么时候被连接上的?
这个是Qt特有的一个根据名字进行缺省连接信号和槽的机制实现的。
你在你的ui文件生成的头文件里可以找到类似于下面的语句:

QMetaObject::connectSlotsByName(MyDialog);

这个函数调用会按照一定的命名规则来把控件的信号和槽函数连接起来。
如果你在Qt Designer里面右键点击控件,然后选择go to slot...,通过这种方式也可以创建同样的缺省信号槽的处理函数。
亦可参见:
http://www.cnblogs.com/ttylikl/archive/2009/07/13/1522770.html