一,什么是QT
基于C++语言的
专注于图形界面,其它方面也很咈的框架
跨平台的
艺术级别的图形开发库
二、qt的发展
2005 qt4.0发布
2008 诺基亚收购qt
2009 qt开源
现在qt由开源社区(qt-project.org)维护
查看qt的版本: qmake -v
三、qt的编程环境
3.1 qt的开发工具
assistant 帮助手册|帮助文档
tarena#assistant
qmake -v : 查看qt版本
qmake -project : 可以把项目的源文件组织成项目描述文件 .pro
qmake : 可以根据.pro文件生成makefile(文件与文件的依赖关系)
make : 根据Makefile得到目标
desinger :设计器 所见即所得的可视化界面设计器,得以的文件是 **.ui
uic : ui转换工具,可以把ui文件变成.h文件
qtcreator : 集成开发工具,属于一个ide
3.2 qt的头文件
/usr/include/qt4/
qt的头文件,按照功能划分了模块
QtGui QTCore
QtSql QtXml QtNetWork QtOPenGL
头文件的名字 和 类型的名字保持一致
一个类型 对应一个头文件
3.3 qt的库文件
/usr/lib/i386-linux-gnu
qt的库文件 就是对头文件的分模块实现
四、第一个qt程序
4.1 建立单独文件夹 写一个cpp程序
tarena#make dir qt/day01/first -p
tarena#cd qt/day01/first
tarena#vi first.cpp
first.cpp代码
#include<QApplicaion>
int main(int argc,char** argv){
/*查文档构建一个qt应用程序对象*/
QApplication app(argc,argv);
/*查文档构建一个标签对象*/
QLabel qlabel("hello qt!");
qlabel.show();
//程序进入事件循环,等待用户交互
return app.exec();
}
4.2 qmake -project
可以把项目的源文件组织成项目描述文件 .pro
tarena#qmake -project
tarena#ls
4.3 qmake
根据pro文件得到Makefile
4.4 make
得到执行文件
五、qt中帮助文档,可以提供的内容
5.1 头文件 的模块 如:
#include<QLable>
或
#include<QtGui/QLabel>
5.2 一个类的继承关系,继承自谁,被谁继承;最顶层类(QObject)
5.3 类的属性 和 继承的属性
5.4 公开的函数
构造函数
成员函数
5.5 信号 和 槽 函数
slots signals
class A{
public solts://声明槽函数
void mySlot();
public:signals://声明信号函数
void mySignal();
}
信号函数 只需要声明 ,不需要实现
5.6 保护函数
一般都是事件处理函数
5.7 静态函数
不使用对象就可以直接调用的函数
如果没有构造函数的话,可以使用静态函数
5.8 类的详细说明
六、中文的显示(编码)
常见支持中文的编码:utf-8 gbk gb2312
QTextCodec 广本编码类
根据文本编码类,结合编码方式,得到一个编码对象?
#include<QApplicaion>
#include<QLable>
#include<QTextCodec>
int main(int argc,char** argv){
/*查文档构建一个qt应用程序对象 曹 */
QApplication app(argc,argv);
/*查文档构建一个标签对象*/
QString encodedString = "中文显示 qt!";
QTextCodec *coder = QTextCodec::codecForName("utf-8");//这个类没有构造方法,调用静态方法创建编码对象
//根据编码对象,把数据转换成Unicode编码
QString string = coder->toUnicode(encodedString);
QLabel qlabel(string);
qlabel.show();
//程序进入事件循环,等待用户交互
return app.exec();
}
七、创建一个按钮,按钮上显示关闭标签
QPushButton
tarena#mkdir closelab
tarena#cd closelab
tarena#ls
tarena#vi closelab.cpp
closelab.cpp源文件
#include<QApplication>
#include<QPushButton>
#include<QTextCodec>
#include<QLabel>
int main(int argc,char** argv){
QApplication app(argc,argv);
QTextCodec *coder = QTextCodec::codecForName("utf-8");
QString string = coder->toUnicode("关闭按钮");
QPushButton qpush("closelab");
qpush.show();
QLabel label(coder->toUnicode("这是一个label"));
label.show();
//程序进入事件循环,等待用户交互
return app.exec();
}
tarena#qmake -project
.....
tarena#ls
tarena#./closelab
七、创建一个按钮 按钮上显示
QPushButton qpush
QLable qlable
按钮对象的行为,影响到标签对象
查看QObject中的一个静态函数,可以完成两个毫不相关的对象的链接。
QObject::connect(
const QObject *sender,
const char *signal,
const QObject *receiver,
const char* method
);
sender:信号的发送者的地址
signal:发出的信号
SIGNAL(信号函数名())//自动将信号函数变为const char*
receiver:信号接收者的地址
method:信号处理函数,一般是槽函数
SLOT(槽函数());
按钮对象的一个信号函数 可以代表点击
void clicked();
标签类型的一个槽函数 可以代表关闭
void close();
closelab.cpp代码如下:
#include<QApplication>
#include<QPushButton>
#include<QTextCodec>
#include<QLabel>
#include<QObject>
int main(int argc,char** argv){
QApplication app(argc,argv);
QTextCodec *coder = QTextCodec::codecForName("utf-8");
QString string = coder->toUnicode("关闭按钮");
QPushButton qpush("closelab");
qpush.show();
QLabel label(coder->toUnicode("这是一个label"));
label.show();
//有关联按钮对象到标签对象,点击按钮就关闭标签
// QObject::connect(&qpush,SIGNAL(clicked()),&label,SLOT(close()));
//点击按钮,关闭整个应用程序
QObject::connect(&qpush,SIGNAL(clicked()),&app,SLOT(quit()));
//程序进入事件循环,等待用户交互
return app.exec();
}
八、父窗口
如果一个窗体没有指定父窗口,则这个窗体是一个独立的窗口。
一旦给一个窗体指定父窗口,则这个窗口会停靠在父窗口上(合在一起)。
父窗口必须是QWidget类型或者是它的子类型(QMainWindow,QDialog)。QWidget是所有可视化窗体的父类。
调整组件的大小
resize(x,y);
移动组件的位置
move(x,y);
tarena$mkdir parentwin
tarena$cd parentwin
tarena$vi parentwin.cpp
parentwin.cpp
#include<QApplication>
#include<QLable>
#include<QWidget>
#include<QPushButton>
int main(int argc,char** argv){
QApplication app(argc,agrv);//用栈的方式创建
//创建一个父窗口
QWidget *parent = new QWidget();//用堆的方式创建
//创建一个标签对象
QLabel qlab(hello qt!,parent);//指定父窗口为parent
//qlab.show();//由于有父窗口,这一行可以去掉
qlab.move(150,50);
//创建一个按钮对象,移动到150,400
QPushButton *qpush = new QPushButton("closelab",parent);
qpush->move(150,400);
//点击按钮关闭标签
QOject::connect(qpush,SIGNAL(clicked()),&qlab,SLOT(close()));
parent->show();
parent->resize(500,500);
return app.exec();
}
编译链接
tarena$qmake -project
...
tarena$make
tarena$ls
tarena$ ./parentwin
qqlogin.cpp案例
#include<QApplication>
#include<QLable>
#include<QDialog>
#include<QLineEdit>
#include<QWidget>
#include<QPushButton>
#include<QObject>
int main(int argc,char** argv){
QApplication app(argc,agrv);//用栈的方式创建
//定义组件指针
QDialog *parent;
QLineEdit *username;
QLineEdit *userpasswd;
QPushButton *blogin;
QPushButton *bcancel;
//给组件指针赋值
parent = new QDialog();
parent->resize(400,300);
username = new QLineEdit(parent);
userpasswd = new QLineEdit(parent);
blogin = new QPushButton("login",parent);
bcancel = new QPushButton("cancel",parent);
//调整组件的位置
username->move(200,50);
userpasswd->move(200,100);
blogin->move(50,200);
bcancel->move(250,200);
parent->show();
//点击按钮关闭父窗口
QObject::connect(bcancel,SIGNAL(clicked()),parent,SLOT(close()));
return app.exec();
}