欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    QT学习笔记-经验篇(共95页).doc

    • 资源ID:13605544       资源大小:551.50KB        全文页数:95页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    QT学习笔记-经验篇(共95页).doc

    精选优质文档-倾情为你奉上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 <qapplication.h>#include <qwidget.h> /窗口类的头文件#include <qpushbutton.h> /按键类的头文件int main(int argc,char *argv)QApplication a(argc,argv);QWidget 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为主部件mainwindow.show(); /显示窗口return a.exec(); /存在一个while循环,等待用户发命令窗口(类)QWidget 按钮(类) QPushButton特性 可关闭 可点击共性 可设大小 可设大小两个类是从可视类派生来的,例如函数setGeometry是设置几何尺寸的,窗口和按钮两类都可调用,设置尺寸大小函数也是由其父类继承来的,两类都可以用。经编译:g+ hello.cpp o hello lqt,编译器会报错,未发现所用到的头文件。分析错误原因:提示中说未找到程序中所用到的头文件,当编译程序时,编译器首先到特定目录下寻找原文件的头文件和函数库:头文件目录:/usr/include库文件目录:/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) #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,它是一个动态库,它包含了众多库文件,链接时只会把所需库文件链接进来,这样就不会使最终生成的文件过大。知识点: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版本#qmake project 产生一个工程文件qt.pro#qmake 产生Makefile文件Makefile#make 生成目标文件和可执行文件hello.o、qt。生成的Makefile缺少句子:LIBS:缺少-lqt,可手工加上。Qt学习笔记(Qt3库)上2009-05-21 11:21/*3.1创建第一个主部件创建主部件的方法是基于QWidget或QDialog类创建一个用户类。可以使用用户类通过公有继承派生于QWidget类,在其中调用一些成员函数来定义窗口外观。题目要求:创建一个空的窗口,并显示在屏幕上。大小为200*120.窗口大小不可调整。源程序:3-1.cpp#include <qapplication.h>#include <qwidget.h>#include <qpushbutton.h>#include <qlabel.h>/在类的声明里,我们只/需要包含新的成员。其它的/方法都从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->setGeometry(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库与用户的交互方式,例如按钮、滑块,是通过使用信号和槽。信号和槽是相互关联的函数题目要求:添加退出按钮3-5.cpp#include <qapplication.h>#include <qwidget.h>#include <qpushbutton.h>#include <qlabel.h>/在类的声明里,我们只/需要一个新的构造函数。/其它的成员都是从类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 QPushButton("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()信号,导致qApp的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 <qapplication.h>#include <qwidget.h>#include <qpushbutton.h>#include <qfont.h>#include <qlcdnumber.h>#include <qslider.h>/在类的声明里,我们只/需要一个新的构造函数。/其它的成员都是从类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!",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(slider,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 <iostream.h>#include <qapplication.h>#include <qwidget.h>#include <qpushbutton.h>#include <qfont.h>class MyMainWindow:public QWidget/这个宏定义是不可缺少的Q_OBJECT;/用户自定义槽public slots:void SetValue();void ChangeValue();/用户自定义信号signals:void ValueChanged();/定义两个数据成员private:QPushButton *b1;QPushButton *b2;/构造函数public:MyMainWindow();类的函数成员的实现在源程序中4-3.cpp(源程序)#include <4-3.h>void MyMainWindow:SetValue()/向自定义信号发送信号emit ValueChanged();void MyMainWindow:ChangeValue()cout<<"test!"<<endl;MyMainWindow:MyMainWindow()/设置主窗口大小setGeometry(100,100,300,200);/按键1:设置其标识符Print,/和坐标位置、几何大小,/第三句设置字体:b1=new QPushButton("Print!",this);b1->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,SLOT(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库)下2009-05-21 11:249-1.cpp#include <qapplication.h>#include <qwidget.h>#include <qpainter.h>class MyMainWindow:public QWidgetpublic:MyMainWindow();private:void paintEvent(QPaintEvent *);QPainter *paint;/此函数是由系统调用的,每当第一次生成或被挡住,它都会再次被调用void MyMainWindow:paintEvent(QPaintEvent *)/此句最好做成局部变量的定义,否则将导致重复申请动态内存paint=new QPainter;paint->begin(this);/设置边框颜色、线形和线的宽度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 w;a.setMainWidget(&w);w.show();a.exec();/*对上一个例子做一个扩展,画一个4*4棋盘9-1-1.cpp#include <qapplication.h>#include <qwidget.h>#include <qpainter.h>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->begin(this);paint->setPen(QPen(blue,4,QPen:SolidLine);paint->setBrush(QBrush(white,SolidPattern);/画5条横线for(i=0;i<5;i+)paint->drawLine(20,y+80*i,340,y+80*i);/画5条竖线for(i=0;i<5;i+)paint->drawLine(x+80*i,20,x+80*i,340);在棋盘正中做两个红棋子paint->setBrush(QBrush(red,SolidPattern);paint->drawEllipse(100,100,80,80);paint->drawEllipse(180,180,80,80);在棋盘正中做两个蓝棋子paint->setBrush(QBrush(green,SolidPattern);paint->drawEllipse(180,100,80,80);paint->drawEllipse(100,180,80,80);paint->end();MyMainWindow:MyMainWindow()setGeometry(100,100,400,400);int main(int argc,char *argv)QApplication a(argc,argv);MyMainWindow w;a.setMainWidget(&w);w.show();a.exec();/*在主窗口上加一个标签,在标签上做出一个动画。15-1.h#include <qapplication.h>#include <qwidget.h>#include <qlabel.h>#include <qmovie.h>#include <qpushbutton.h>#include <qfont.h>#include <qlayout.h>class MyMainWindow:public QWidget/宏定义Q_OBJECT;public:MyMainWindow(char *);QMovie movie; /定义动画的对象public slots:void UnPause(); /继续播放void Pause(); /暂停void addSpeed(); /加速动画的播放速度void decSpeed(); /减慢动画的播放速度private:unsigned long num;QLabel *label;QPushButton *b1;QPushButton *b2;QPushButton *b3;QPushButton *b4;QPushButton *b5;15-1.cpp#include "15-1.h"void MyMainWindow:UnPause()movie.unpause(); /继续播放void MyMainWindow:Pause()movie.pause(); /暂停播放void MyMainWindow:addSpeed()num+=20;movie.setSpeed(num); /以20%增加速度void MyMainWindow:decSpeed()num-=20;movie.setSpeed(num); /以20%减少/str里存放动画的文件名MyMainWindow:MyMainWindow(char *str):movie(str) setGeometry(100,100,300,280);num=100; /初始速度为100b1=new QPushButton("Continue!",this);b1->setGeometry(130,20,120,40);b1->setMinimumSize(40,20);b1->setFont(QFont("Times",18,QFont:Bold);b2=new QPushButton("Pause!",this);b2->setGeometry(130,70,120,40);b2->setMinimumSize(40,20);b2->setFont(QFont("Times",18,QFont:Bold);b3=new QPushButton("Hurry!",this);b3->setGeometry(130,120,120,40);b3->setMinimumSize(40,20);b3->setFont(QFont("Times",18,QFont:Bold);b4=new QPushButton("Slow!",this);b4->setGeometry(130,170,120,40);b4->setMinimumSize(40,20);b4->setFont(QFont("Times",18,QFont:Bold);b5=new QPushButton("Quit!",this);b5->setGeometry(130,220,120,40);b5->setMinimumSize(40,20);b5->setFont(QFont("Times",18,QFont:Bold);label=new QLabel(this);label->setGeometry(10,10,120,60);label->setMovie(movie);QVBoxLayout *vbox=new QVBoxLayout(this);vbox->addWidget(label);vbox->addWidget(b1);vbox->addWidget(b2);vbox->addWidget(b3);vbox->addWidget(b4);vbox->addWidget(b5);connect(b1,SIGNAL(clicked(),this,SLOT(UnPause();connect(b2,SIGNAL(clicked(),this,SLOT(Pause();connect(b3,SIGNAL(clicked(),this,SLOT(addSpeed();connect(b4,SIGNAL(clicked(),this,SLOT(decSpeed();connect(b5,SIGNAL(clicked(),qApp,SLOT(quit();int main(int argc,char *argv)QApplication a(argc,argv);/给构造函数发送动画名,并且文件必须使.gif格式MyMainWindow w("trolltech.gif"); a.setMainWidget(&w);w.show();a.exec();在Qt程序窗口上点击任意区域移动窗体在Qt程序窗口上点击任意区域移动窗体 方法是截取组件Widget的鼠标事件函数,自己处理鼠标点击和移动的事件. Void MyWidget:mouseMoveEvent(QmouseEvent *e) Qpoint newpos=e->globalPos();/获得鼠标相对于屏幕坐标系的位置 Qpooint upLeft=pos0+newpos-last;Move(upLeft); /选定区域 Void MyWidget:mousePressEvent(QmouseEvent *e) last=e->globalPos();/获得鼠标相对于屏幕坐标系的位置 pos0= e->globalPos()-e->pos(); 解释: e->globalPos(); /获得鼠标相对于屏幕坐标系的位置 e->pos(); /鼠标相对于窗体左上角的位置 pos0; /窗体左上角的位置 upLeft; /新的窗体左上角的位置这里,我们取得的鼠标位置是绝对位置,即相当于窗口的位置,同时也记录下窗体左上角的位置,当鼠标移动时,取得新的绝对位置,则窗口做上角的新位置应该时原来位置与鼠标移动的位置之差. - 在Qt中创建无边框窗口 首先要设置窗体组件的Wflags是WstyleNoBorder,无边框窗口要求对整个窗口使用图像掩码. 具体方法如下: 设置Qpixmap类型成员变量m_pixmapBack; 在构造函数中书写: m_pixmapBack.load(“bg.bmp”); Qbitmap bitmaptmp(“bg.bmp”);/作为掩码的位图,白色部分透明,黑色部分保留. setMask(bitmaptmp); setBackgroundPixmap(m_pixmapBack); -对QPixmap对象进行缩放在Qt中进行绘图操作的时候我们常常需要对位图进行缩放,利用QWMatrix类 就可以很轻松的完成此功能,示例代码如下: QPixmap pm ; / do something to pm if ( !pm.isNull() ) QWMatrix m;/创建一个QWMatrix类的对象 m.scale(0.5f, 0.5f);/设立一个进行缩小到1/2的变换矩阵 pm = pm.xForm(m);/进行变换操作 -Qt系统对话框中文化 1.安装Qt4.5的目录为/opt/qtsdk-2009.03/qt/translations/,在此目录下有*_zh_CN.ts 和 *_zh_CN.qm 把它们拷贝到你的工程目录下。2.在主文件加入下列代码:QTranslator translator(0); translator.load("qt_zh_CN.qm");QApplication app(argc, argv);app.installTranslator(&translator);别忘了头文件包含QTranslator3.编译运行你的程序,就可以实现中文化了。 QPainter 能绘制: point, line, rectangle, ellipse, arc, chord, polygon, pie segment, Bezier curve, QPixmap, QImgeQt支持的高级特性: antialising, alpha blending, gradient fill, vector path.QPaint在什么上绘制呢? 在"paint device": QWidget, QPixmap, QImage, QSvgGenerator, 连接QPrinter来打印和生成PDF文档.通常在protected void paintEvent(QPaintEvent *event)中进行绘制.protected :    virtual void paintEvent(QPaintEvent *event)         QPainter painter(this); / Pointer of the paint device        .    QPainter的3个主要设置是: pen, brush, font. painter.setPen(QPen(.);painter.setBruch(QBrush(.);painter.setFont(QFont(.);painter.setRenderHint(QPainter:Antialiasing, true);设置了bursh之后, 画的是效果即fill.QPainter的属性影响绘制的图形.通常使用painter.paintXXX(.)来绘制图形.-1.在要换背景的类的构造函数中装载一个图片,变量要为全局的,接下来会用到     backgroundImage.load(":image/bg.png");     setAutoFillBackground(true);2.实现resizeEvent函数,在里面画背景void Example:resizeEvent(QResizeEvent *event)     QWidget:resizeEvent(event);    QPalette pal(palette();    pal.setBrush(QPalette:Window,QBrush(backgroundImage.scaled(event->size(), Qt:IgnoreAspectRatio,Qt:SmoothTransformation);    setPalette(pal); 关键使用widget的palette的brush. int main(int argc, char *argv)     QApplication a(argc, argv);    QWidget *widget = new QWidget();    widget->setAutoFillBackground(true); / 这句要加上, 否则可能显示不出背景图.    QPalette palette = widget->palette();    palette.setBrush(QPalette:Window,                     QBrush(QPixmap("1.png").scaled( / 缩放背景图.                             widget->size(),                             Qt:IgnoreAspectRatio,                             Qt:SmoothTransformation); / 使用平滑的缩放方式    widget->setPalette(palette); / 至此, 已给widget加上了背景图.    QHBoxLayout *layout = new QHBoxLayout();    layout->addWidget(widget);    QWidget *mw = new QWidget();    mw->setLayout(layout);    mw->resize(500, 500);    /mw->setWindowFlags(Qt:FramelessWindowHint);    mw->show();    return a.exec();-

    注意事项

    本文(QT学习笔记-经验篇(共95页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开