qt第一天:
1.qt与c++有关系,与c没有关系。
2.里面的类库都是以q开头的。
共3天:
1.qt基础 2.c++编程方式 3.
1.是一个基础c++语言的框架,专注于图形界面。纯面向对象,跨平台的框架:手机,unix/linux .
2.05年qt4的发布,现在的技术都是基于qt4的。08年被诺基亚收购,09年把源代码开放。
3.面向过程:函数+数据结构。 函数封装代码。(一个函数不应该超过200行有些公司有规范) 结构体封装数据。
面向对象:大封装:类:封装数据+封装代码
4.跨平台:标c,标c++才能跨。
5.开源:qt. 05年之后才开源。
二qt编程环境 (龙腾青云)
1.qt工具:$QTDIR/bin ${QTDIR}/bin 这是一个环境变量:保存qt的安装目录 /opt/qt
2.过英语4,6级:读阅读理解即可
3.assistant 帮助文档,以浏览器组织的。看最后一项即可。类似于msdn
assistant_adp 后台用的
designer 设计器 用来设计界面。以ui为后缀的文件,对应一个界面图形
moc 也是后台跑的程序。moc做转换用的:转换信号和槽函数。具备一些特定特性的函数,就是一些函数罢了。
这是qt的核心:信号和槽
qmake 最重要的一个工具:2个主要的功能:
1.项目的源代码组织成项目描述文件.pro结尾的。project
2.把pro文件生成makefile . makefile是unix/linux下的组织项目的指令。
make工具Linux独有的工具是操作系统的提供:把makefile生成目标。
qtconfig:qt配置文件:字体,显示
uic:也是一个重要的牛的工具。把ui文件转换成.h文件
xmlpatterns:每种语言对xml都有解析支持。所以这个东西是qt用来解析xml的工具。
xml:1.存储数据 2.配置文件
*使用端口最好大于1500,因为小的有冲突呗。
三:qt的头文件
c++中去加载c的标准头文件,把.h去掉,前面加c .<ostream> <cstdio> #include <pthread.h>
qt:头文件和类名完全相同。#include <QApplication> ==><qapplication.h>只是为了符合c++标准规范罢了。
include文件夹按模块划分:QtCore:qt核心库 QtGui界面 QtNetwork网络包 QtopenGL 建模 QtScript 脚步支持 Qtsql数据库支持 qtxml xml的支持
core gui sql xml network 就不要加上qt了。类似于动态库去掉lib一样。
库:libQtCore.so libQtGui.so
QtCore文件夹:QApplication -> #include "qapplication.h"
qt的库:$QTDIR/lib 按模块实现的,使用时候按模块来加载他, core gui sql xml nework
qt默认加载2个库:core gui
头文件不会默认加载,所以开发的时候要自己加载头文件。
环境变量:
QTDIR /opt/qt
PATH /opt/qt/bin $QTDIR/bin:$PATH --> linux %QTDIR%/bin;%PATH%--->windows
QMAKESPACE:生成不了makefile,可能跟它有关系。 makefile生成时系统相关的。他是控制不同系统的编译器。
//提供了各种系统 linux g++ ; aix g++ ; hpuix g++ ; win32 g++
把值配置成:/opt/qt/mkspaces/win32-g++ 即可在windows下面生成
四:例子:
1.qt中的main函数必须要有参数,否则跑起来:int main(int argc,char **argv){
QApplication app(argc,argv);
QLabel qlab("hello qt! ");//在QtGui模块中,要引入#include <QLable>
//qt的组件默认是不显示的,否则屏幕会产生抖动效果,所以qt所有组件必须show
qlab.show();
return app.exec();进入事件循环,不会立即停止罢了。
}
shift+zz退出vi.
qmake -project //生成.pro文件 :hello.pro
qmake hello.pro //如果有1个pro就可以不写.pro . 生成Makefile
make -> 生成了可执行文件 。就去执行 ./hello(请加上./)
编程步骤:
1.新建文件夹 hello
2.在hello中写一个hello.cpp //对应的是项目名:即文件夹名称
3.qmake -project 生成pro文件
4.qmake xxx.pro
5.make 生成目标
6.执行它即可./hello
rm hello Makeifle hello.o hello.pro 重新生成之前。 这些东西都要删除最好。小心乱了。
如果文件名和项目名称不一致,那么makefile的时候会报错,但是我们不理会他也可以正常的工作罢了。
下午:
解决字体问题:这就是qt的配置问题
qt->bin/qtconfig 配置问题--fonts -> family -> luxi-serif
然后一定要ctrl+s来保存即可。
解决乱码问题:
选择编码规则:utf-8 gbk gb23212
按什么编码,就按什么解码即可。 qt中有个类帮我们解决这个问题:QTextCodec
帮助文档:公共的类型,公开的函数,静态函数,保护函数:为子类而生的;c++中的关键字都是小写的。信号函数 signals 槽函数slots
解决步骤:
1。得到编码对象QTextCodec *obj= codecForName("编码");
2。设置编码对象 setCodecForTr(obj);
3。用编码对象对程序中的字符串进行翻译 tr("要显示的字符串","编码")
代码:QTextCodec *coder=QTextCodec::codecForName("gbk");
QTextCodec::setCodecForTr(coder);
QObject::tr("你好!!","gbk");//所有类型的基类QObject中的静态方法。#include<QObject>
qmake -project //用于描述项目的:仅仅和项目中的文件名有关系
qmake 根据pro文件中的描述生成文件依赖关系的makefile
make则和代码有关系。所以修改了代码,没有增加文件和改变文件名就直接使用make即可。
多看1小时电视,少活21分钟。不要浪费青春。
qsort()排序函数;
函数和函数之间产生关联:1。函数调用函数 2。函数参数是函数指针 3。父子虚函数关系
但是qt中的机制不一样:没有关联也能够影响到。
qt中信号和槽函数,是解决对象与对象之间调用关系的。 强到这2个对象毫无关系!!也可以。
即高内聚,低耦合。软件应该追求。
注意:qt的组件都是在0,0点出生,多个组件会挡住了。
QObject::connect(信号的发出者指针,信号,接受者,槽);能够把2个没有关系的对象连接起来
,这就是信号和槽的优势:让2个无关系的对象有关系,相互影响呗;
bool connect (const QObject* sender,const char* signal,const QObject* receiver,const char* method,Qt:ConnectionType type=Qt::AutoConnection);
当我需要一个一级指针,我就定义个对象,&取地址即可
当我需要一个二级指针,我就定义这个对象的指针,&去地址即可。
qt默认给每个控件一个窗体!而不是在同一个窗体里面!指定他们一个父窗口,这样就长得像在同一个窗口了。这个时候组件都在0,0位置,相互挡住了。
qtcreator 在诺基亚官网下载qt SDK开发包,双击:qtcreate
qt中,控件是个子窗口,外面这个是父窗口!
当信号和槽函数中出现参数时,信号和槽的参数要匹配
connect(sender,SIGNAL(test(int)),recv,SLOT(tt(int/*左边是什么,这就是什么类型*/)))
带参的:只要写参数类型即可,写多了:错!!!
作业:查信号槽,来使用拖动拉条来改变文本框中的值。