QT学习笔记-经验篇.docx
《QT学习笔记-经验篇.docx》由会员分享,可在线阅读,更多相关《QT学习笔记-经验篇.docx(82页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、QT学习笔记(初识)2009-05-21 11:13QT学习笔记(初识)查看RedHat自带QT库路径:/usr/lib/qt-3.1,查看目录qt3-1下是否有13个文件,若没有,则需要安装。主菜单-系统设置-添加程序-选中KDE软件开发-更新。在Linux下做一个五子棋的小游戏。在/home/下创建目录qt,编写一个小程序hello.cpp的C+文件。下面介绍hello.cpp源程序:#include #include /窗口类的头文件#include /按键类的头文件int main(int argc,char *argv)QApplication a(argc,argv);QWidge
2、t mainwindow; /定义主窗口对象mainwindow.setMinimumSize(20,10); /设置最小尺寸mainwindow.setMaximumSize(200,100); /设置最大尺寸QPushButton helloworld(Hello World!,&mainwindow); /调用了/QPushButton的第二个构造函数,/指定副部件为mainwindowhelloworld.setGeometry(20,20,160,60); /此函数是由其父类继承来的a.setMainWidget(&mainwindow); /设置mainwindow为主部件main
3、window.show(); /显示窗口return a.exec(); /存在一个while循环,等待用户发命令窗口(类)QWidget 按钮(类) QPushButton特性 可关闭 可点击共性 可设大小 可设大小两个类是从可视类派生来的,例如函数setGeometry是设置几何尺寸的,窗口和按钮两类都可调用,设置尺寸大小函数也是由其父类继承来的,两类都可以用。经编译:g+ hello.cpp o hello lqt,编译器会报错,未发现所用到的头文件。分析错误原因:提示中说未找到程序中所用到的头文件,当编译程序时,编译器首先到特定目录下寻找原文件的头文件和函数库:头文件目录:/usr/i
4、nclude库文件目录:/lib/ , /usr/lib/但QT库存放在目录/usr/lib/qt-3.1下,此文件里有三个重要的目录:/bin/;/lib/;/include/./bin里存放的是QT库的使用手册;/lib下存放的是库文件,即由原库文件生成目标文件*.o;/include下存放的是各库文件的声明。因此,在编译时,编译器找不到正确的文件,所以必须对环境变量做修改。方法一:敲入命令,这样可以暂时修改环境变量,设定其查找路径,但并不能保存修改,在下一次开机后,需要重新设置。1) #g+ hello.cpp o hello lq t I/usr/lib/qt-3.1/include2
5、) #export CPLUS_INCLUDE_PATH=/usr/lib/qt-3.1/include#g+ hello.cpp o hello lqt以上两种方法等价。再次编译后仍旧有错,找不到库文件。指定库路径:1) #g+ hello.cpp o hello lqt L/usr/lib/qt-3.1/lib2)#export LIBRARY_PATH=/usr/lib/qt-3.1/lib#g+ hello.cpp o hello lqt最终生成可执行文件hello。其中,-lqt是连接QT库的参数语句,-lqt等价于-libqt.so,它是一个动态库,它包含了众多库文件,链接时只会把
6、所需库文件链接进来,这样就不会使最终生成的文件过大。知识点:gcc -I +头文件路径-L +库文件路径-l +链接库方法二:将环境变量添加到/etc/profile/内,它是一个类似脚本的文件,每次开机都会执行里面的语句,即系统在开机时自动执行改变路径的命令,来修改环境变量。添加内容:CPLUS_INCLUDE_PATH=/usr/lib/qt-3.1/includeLIBRARY_PATH=/usr/lib/qt-3.1/libexport CPLUS_INCLUDE_PATH LIBRARY_PATH编译C+常用命令:(源文件hello.cpp)#qmake v 可查看qt版本#qmak
7、e project 产生一个工程文件qt.pro#qmake 产生Makefile文件Makefile#make 生成目标文件和可执行文件hello.o、qt。生成的Makefile缺少句子:LIBS:缺少-lqt,可手工加上。Qt学习笔记(Qt3库)上2009-05-21 11:213.1创建第一个主部件创建主部件的方法是基于QWidget或QDialog类创建一个用户类。可以使用用户类通过公有继承派生于QWidget类,在其中调用一些成员函数来定义窗口外观。题目要求:创建一个空的窗口,并显示在屏幕上。大小为200*120.窗口大小不可调整。源程序:3-1.cpp#include #incl
8、ude #include #include /在类的声明里,我们只/需要包含新的成员。其它的/方法都从QWidget类中继承来:class MyMainWindow:public QWidgetQPushButton *b;QLabel *l;public:MyMainWindow();MyMainWindow:MyMainWindow()/设置窗口的最大、最小尺寸/我们不需要添加this指针,/因为C+默认是现在的类setMinimumSize(400,300);setMaximumSize(400,300);b=new QPushButton(hello world!,this);b-se
9、tGeometry(20,20,160,80);l=new QLabel(label,this);l-setGeometry(100,90,160,93);int main(int argc,char *argv)/创建要求的应用类对象aQApplication a(argc,argv);/创建MyMainWindow类的对象,/并设置其为主视图MyMainWindow w;a.setMainWidget(&w);/显示主窗口对象,并且/它的子视图也会显示到屏幕w.show();/等待用户命令a.exec();QT库及用户的交互方式,例如按钮、滑块,是通过使用信号和槽。信号和槽是相互关联的函数
10、题目要求:添加退出按钮3-5.cpp#include #include #include #include /在类的声明里,我们只/需要一个新的构造函数。/其它的成员都是从类QWidget中继承来的:class MyMainWindow:public QWidgetQPushButton *b;QLabel *l;public:MyMainWindow();MyMainWindow:MyMainWindow()setGeometry(100,100,200,170);/setMinimumSize(400,300);/setMaximumSize(400,300);b=new QPushBut
11、ton(Quit!,this);b-setGeometry(20,20,160,80);b-setFont(QFont(Times,18,QFont:Bold);l=new QLabel(this);l-setGeometry(10,110,180,50);l-setText(If you click the button above,nthe whole program will exit);l-setAlignment(AlignCenter);/这里按钮b的clicked()信号及qApp的槽quit()链接,当点击按钮时,将产生QPushButton:clicked()信号,导致qAp
12、p的quit()槽被执行,从而程序退出。那么,什么是qApp呢?qApp是Qt的一个内置指针。它总是指向程序中的QApplication对象(这里指a)。/connect(b,SIGNAL(clicked(),qApp,SLOT(quit();int main(int argc,char *argv)QApplication a(argc,argv);MyMainWindow w;a.setMainWidget(&w);w.show();return a.exec();信号和槽的使用题目要求:利用滑块来改变LCD显示的值4-1.cpp#include #include #include #in
13、clude #include #include /在类的声明里,我们只/需要一个新的构造函数。/其它的成员都是从类QWidget中继承来的:class MyMainWindow:public QWidgetQPushButton *b;QLCDNumber *lcd;QSlider *slider;public:MyMainWindow();MyMainWindow:MyMainWindow()setGeometry(100,100,300,200);/setMinimumSize(400,300);/setMaximumSize(400,300);b=new QPushButton(Quit
14、!,this);b-setGeometry(10,20,80,40);b-setFont(QFont(Times,18,QFont:Bold);lcd=new QLCDNumber(2,this);lcd-setGeometry(100,10,190,180);slider=new QSlider(Vertical,this);slider-setGeometry(10,60,80,130);/下面一行代码,使点击按键1,程序退出connect(b,SIGNAL(clicked(),qApp,SLOT(quit();/下面一行链接滑块和显示器,使数字随着滑块的移动而改变connect(slid
15、er,SIGNAL(valueChanged(int),lcd,SLOT(display(int);int main(int argc,char *argv)QApplication a(argc,argv);MyMainWindow w;a.setMainWidget(&w);w.show();return a.exec();用户自定义槽,需另外把自定义类做成声明函数,类中成员函数的实现可放在源函数里。4-3.h(类的声明)#include #include #include #include #include class MyMainWindow:public QWidget/这个宏定义是
16、不可缺少的Q_OBJECT;/用户自定义槽public slots:void SetValue();void ChangeValue();/用户自定义信号signals:void ValueChanged();/定义两个数据成员private:QPushButton *b1;QPushButton *b2;/构造函数public:MyMainWindow();类的函数成员的实现在源程序中4-3.cpp(源程序)#include void MyMainWindow:SetValue()/向自定义信号发送信号emit ValueChanged();void MyMainWindow:ChangeV
17、alue()couttest!setGeometry(10,20,80,40);b1-setFont(QFont(Times,18,QFont:Bold);/按键1:设置其标识符Quit,/和坐标位置、几何大小,/第三句设置字体:b2=new QPushButton(Quit!,this);b2-setGeometry(10,80,80,40);b2-setFont(QFont(Times,18,QFont:Bold);/ValueChanged收到信号,就给自定义槽发送信号,ChangeValue则打印字符串connect(this,SIGNAL(ValueChanged(),this,SL
18、OT(ChangeValue();/点击1按键,向自定义槽发送信号connect(b1,SIGNAL(clicked(),this,SLOT(SetValue();/点击2按键,程序退出connect(b2,SIGNAL(clicked(),qApp,SLOT(quit();int main(int argc,char *argv)/定义一个应用类对象QApplication a(argc,argv);/定义一个应用类对象MyMainWindow w;/设置w为主窗口a.setMainWidget(&w);/显示ww.show();return a.exec();Qt学习笔记(Qt3库)下20
19、09-05-21 11:249-1.cpp#include #include #include class MyMainWindow:public QWidgetpublic:MyMainWindow();private:void paintEvent(QPaintEvent *);QPainter *paint;/此函数是由系统调用的,每当第一次生成或被挡住,它都会再次被调用void MyMainWindow:paintEvent(QPaintEvent *)/此句最好做成局部变量的定义,否则将导致重复申请动态内存paint=new QPainter;paint-begin(this);/设
20、置边框颜色、线形和线的宽度paint-setPen(QPen(blue,10,QPen:SolidLine);/设置边框内部颜色全部填充为红色paint-setBrush(QBrush(red,SolidPattern);/绘制矩形paint-drawRect(20,20,160,160);/绘图介绍paint-end();MyMainWindow:MyMainWindow()/设置主窗口坐标位置、大小setGeometry(100,100,200,200);int main(int argc,char *argv)QApplication a(argc,argv);MyMainWindow
21、w;a.setMainWidget(&w);w.show();a.exec();对上一个例子做一个扩展,画一个4*4棋盘9-1-1.cpp#include #include #include class MyMainWindow:public QWidgetpublic:MyMainWindow();private:/绘图函数声明void paintEvent(QPaintEvent *);QPainter *paint;void MyMainWindow:paintEvent(QPaintEvent *)int i;int x=20,y=20;paint=new QPainter;paint
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QT 学习 笔记 经验
限制150内