本为以qt2.3.12作为源码进行分析。
下面是一个简单的显示一个按键,并将按键链接到退出操作的程序,本文将一步一步分析,qt是如何实现此操作的。
#include <qtopia/qpeapplication.h>
#include <qpushbutton.h>
#include <qobject.h>
int main(int argc,char *argv[])
{
QPEApplication a(argc,argv);
QPushButton *button=new QPushButton("quit",NULL);
QObject::connect(button,SIGNAL(clicked()),&a,SLOT(quit()));
button->show();
return a.exec();
}
QPushButton是继承于QButton的,我们可以到qbutton.cpp中查看click()事件是如何产生的。
// qt2/src/widgets/qbutton.cpp
/*!\reimp
*/
void QButton::mousePressEvent( QMouseEvent *e )
{
if ( e->button() != LeftButton )
return;
bool hit = hitButton( e->pos() );
if ( hit ) { // mouse press on button
mlbDown = TRUE; // left mouse button down
buttonDown = TRUE;
if ( autoMask() )
updateMask();
repaint( FALSE );
emit pressed();
if ( repeat )
timer()->start( autoRepeatDelay, TRUE );
}
}
/*!\reimp
*/
void QButton::mouseReleaseEvent( QMouseEvent *e)
{
if ( e->button() != LeftButton || !mlbDown )
return;
if ( d )
timer()->stop();
mlbDown = FALSE; // left mouse button up
buttonDown = FALSE;
if ( hitButton( e->pos() ) ) { // mouse release on button
nextState();
emit released();
emit clicked(); //此处产生一个click()事件,这样就能够通过connect函数进行绑定
} else {
repaint( FALSE );
emit released();
}
}