大量品读大量代码,从代码中借助工具

或许有很多人在学习编程的时候都会碰到同样一个问题:“就是自己掌握了一本语言的基础,或者说已经很好的掌握了一门语言的基础,但是为什么老是头重较轻,觉得自己学得东西都很理论呢,不能真正的解决日常我应用的东西,其实除了缺少实践之外,我们应该大量品读代码,从别人的例子中寻找别人遇到的问题,别人是怎么通过什么手段去解决一类问题的。久而久之我们就可以把别人的东西变成自己的东西,积少成多,从模仿到创新,然后开始研发东西。

下面我来介绍一种对于本人,或者很多朋友都适用的方法,当然也有很多人正在使用此种方法进行学习或者工作,贴出此文主要目的是使迷茫种的朋友,有一个具体的奋斗方向,大虾路过留下宝贵的建议。谢谢。

方法:大量品读别人实际问题的代码,从代码中发现自己不懂的,同过搜索引擎去搜索(百度或者谷歌)此个函数或者此个语法的用法。尽量的在理解之后,自己整理编写一遍。

下面以C/C++为例

具备条件:

1,                  具有C/C++基础,编写过一些简单的程序,多简单都可以,哪怕是用C编写从一加到一百的程序。

2,                  具备一定的英文能力,最后电脑上安装好一个翻译软件。(推荐金山词霸)

3,                  当然是兴趣所向咯,如果你不喜欢编程,那就不要往下看了。

4,                  最最最重要你有吃苦耐劳的精神,有耐心,要坚持,不要三分钟热度。

下面我以LINUXQT编程为例子,从头到尾来剖析学习编程的方法。方法是目的,可能您不熟悉LINUX环境,但是我们讨论的是方法

下面我以一个LINUX下用QI获取鼠标和键盘事件的程序为例子来解析我通过这种方法进行学习的步骤和体会。希望对大家有帮助。

首先:必须明白你所编程的项目所有完成的功能,鼠标和键盘事件的获取,顾名思义,就是同过编写一个程序,来得知当前键盘或者鼠标给电脑发送一个什么指令,要完成什么工作,比如按下Q,左移一下鼠标,你必须发挥你的想象怎么样才可以通过QT去获取,当然你可以乱七八糟的想一下,重要的是你思考了。当然不要想到美女之类的。

QT获取鼠标和键盘事件的代码如下:

Mousekeyevent.h

/********************************************

**$Id:/sample/6/mousekeyevent.h 2.3.2 edited

*******************************************/

#ifndef MOUSEKEYEVENT_H/*首先大家来看这段预处理命令,当然如果C++学得很扎实的

#define MOUSEKEYEVENT_H 人,很快就可以理解这一小段预处理命令,及其大概结构

#include                 如果对C++不是很熟悉,有点模糊的人来说,或许

#include                            他并不知道在这里存在#ifndef

#include                                                             预处理命令;

Class MouseKeyEvent:public QWidget                                     else

{                                                                                         预处理命令;      

Q_QBJECT                                                                          #iendif这个结构,但是不   

Public:                                               要紧,你上百度:搜索#ifndef这个关键字,其用法

MouseKeyEvent(Qwidget *parent=0,const char *name=0);就出来了,试用一下吧,但是你完全protected:                                                                        看不懂这一段话的时候,建议你系统

void mousePressEvent(QMouseEvent*);                           的学一下C++先。*/

void mousemoveEvent(QMouseEvent*);

void keypressEvent(QkeyEvent*);

private:

Qlabel *label//这种关于C++的关键概念,在这里黑猪就不啰嗦了。

}

#endif//

似乎大家都看得到上面程序中

#include

#include

#include

这三个头文件,或者对于对QT不熟悉的人不了解他们的用途(在这里我只想讨论编程的方法,不想涉及各别的东西),现在就让我们查一下“QT参考文档”吧http://www.qiliang.net/qt/

你可以通过这个网站来查询关于这几个类的用法,他们的数据成员,成员函数等等。

相信你看了过后,会发出“哦,原来这样”的感叹。

 

 

Mousekeyevent.cpp

/************************

**$Id:/sample/6/mousekeyevent.cpp

***************************/

#include “mousekeyevent.h”

MouseKeyEvent::MouseKeyEvent(QWidget *parent,const char *name)

      :QWidget(parent,name)

{

setCaption(“OURS_qt_Example”);//或许你看到这行对于这个setCapion这个函数完全没有概

setBackgroundColor(white);     念,此时你不必着急,通过查询http://www.qiliang.net/qt/

label= new Qlabel(“Wellcome”,this);你可以得到这个函数的完整的用法。

label->setBackground(white);

QFont f(“Helvetica”,16,QFont::Bold);

Label->setFont(f);

Label->setGeometry(25,,70,250,100);//对于函数的用法同理上。

Label->setAlignment(AlignVCenter |AlignHCenter);

 

}

Void MouseKeyEvent::mousePressEvent(QMouseEvent *e)

{

Switch(e->buttion())

{

case LeftButton:

     Label->clear();

     Label->setText(“Mouse:LeftButton Pressed!”);

       Break;

case RightButton:

       Label->clear();

                            Label->setText(“Mouse:RightButton Pressed!”);

       Break;

case MidButton:

       label->clear();

       label->setText(“Mouse:MidButton Pressed!”);

       break;

default;

label->clear();

label->setText(“Mouse:Undefined Pressed!”);

}

}

Void MouseKeyEvent:mouseMoveEvent(QMouseEvent *e)

{

QString str=QString(“X:”);

QString ps=””;

Ps=ps.setNum(e->x());

Str+=ps;

Str+=”   Y:”;

Ps=””;

Ps.setNum(e->y());

Str+=ps;

Label->clear();

Label->setText(str);

}:

Void MouseKeyEvent::keyPressEvent(QKeyEvent *e)

{

Switch(e->key())

{

case Key_Escape:

                            Label->clear();

                            Label->setText(“Key:Esc Pressed”);

case Key_Tab:

                     label->clear();

                     label->setText(“Key:Tab Pressed”);

                     break;

case Key_Backtab:

                            label->clear();

                            label->setText(“Ket:BackTab Pressed”);

                            break;

case Key_BackSpace:

                                   label->clear();

                                   label->setText(“Key:BackTab Pressed!”);

//以下键盘各键的获取同理可得,我在这里就不要写下去了。

 

}

}

Main.cpp

/*******************************

******************************/

#include

#include “mousekeyevent.h”

Int main(int argc,char **argv)

{

QApplication(argc,argv);

MouseKeyEvent *mousekeyevent=new MouseKeyEvent(0);

Mousekeyevent->setGeometry(10,20,320,240);

App.setMainWiget(mousekeyevent);

mousekeyevent->show();

int result=app.exec();

return result;

 

}

其实,以上说得不是很详细,我平时编程都是通过这种方式去提高的,看程序,不懂查文档,或者上百度查一下其用法,其他没有列出来的,很多方法都一样。当然最重要的还是自己多多动手,这样记得的东西才会牢固。

由于本人也是新人,写文章也没有多久,只是把自己学习的想法和大家交流而已,欢迎大家批评指出,给我多一点意见,大家互相交流。

                                               黑猪

 

 

 

投 票

觉得本文不错,投一票   

评 论


验证码: 看不清?换一张