第一天
一、Qt的介绍
捷讯
二、Qt的框架
QMainWindow PC端用
Qwidget 图形界面的基类(窗口的基类)
QDialog 对话框
Ctrl+R
三、项目文件
#include "mywidget.h"
// QApplication应用程序类
// Qt头文件没有.h
// 头文件和类名一样,前面两个字母大写
#include <QApplication>
int main(int argc, char *argv[])
{
// 有且只有一个应用程序类的对象
QApplication a(argc, argv);
// Mywdiget继承与QWidget,QWideget是一个窗口基类
// 所以MyWidget也是窗口类
// w就是一个窗口
MyWidget w;
// 窗口创建默认是隐藏,需要人为显示
w.show();
// a是应用程序对象 a.exec()会让程序一直执行,等待用户操作
return a.exec();
}
四、第一个Qt程序(hello qt)
五、父窗口和子窗口的区别(控件,部件,构件)
六、信号和槽
相当于是按按钮,触发事件,也就是信号
Qt对象之间通信的接口
七、坐标系统
八、内存回收机制(new delete)
系统会有一个对象树 回收的时候从底层进行回收 自动回收
1)、指定父对象后
子对象如果是动态分配空间的new,不需要手动释放delete,系统会自动释放。
2)、直接或者间接继承与Qobject
九、带菜单栏的窗口
十、对话框
模态对话框
非模态对话框
第二天
一、 QtCreator设计器的使用
二、常用控件
QLabel
三、布局
分裂水平器
四、自定义控件
五、常用事件的处理
事件
先一直在那个a.exec();
然后又事件过来,打断,过去进行处理,处理完又返回现场,相当于一个多重中断
先要创建过滤器
然后再按照过滤器
过滤器的创建还是有点问题
3、容器类
QStackWidget
QWidget
QFrame
4、编辑类
QComboBox
QLineEdit
QTextEdit
5、显示类
QLabel
QLcdNumber
QProgressBar
2)、布局
水平、网格
布局属性
大小策略 固定
最小大小 、最大大小
弹簧
3)、自定义控件(提升)
4)、常用事件处理
重写事件就可以啦
第三天
一、Qpainter绘图
QPainter(画家)----->QPainEngine(中间桥梁 接口 引擎)---->QPaintDevice(绘图设备)
二、绘图设备(QPixmap,QImage,QBitmap,Qpicture)
QBitmap(黑白) QPixmap(彩色)
三、文件操作(QFile,QFileInfo,QDataStream,QTextStream,QBuffer)
void Widget::on_pushButton_clicked()
{
QString path=QFileDialog::getOpenFileName(
this,"open","../");
if(false == path.isEmpty()){
QFile file;
file.setFileName(path);
bool isOk=file.open(QIODevice::ReadOnly);
if(true == isOk){
QTextStream stream(&file);
// 指定编码
stream.setCodec("UTF-8");
QString str=stream.readAll();
ui->textEdit->setText(str);
}
}
}
第四天
一、TCP编程
二、UDP编程
UDP可以组播
三、UDP传输文件
第0段取出来,只取第0段
四、多线程编程(多任务)
第五天
一、数据库编程
// query.exec("select * from admin");
// 插入
//query.exec("insert into admin(account,password) values('cp','123456')");
// 批量插入 odbc的风格 预处理语句
// ?相当于占位符
query.prepare("insert into admin(account,password) values(?,?)");
// 给字段设置内容list
QVariantList accountList;
accountList << "小陈" <<"小王"<<"小江";
QVariantList passwordList;
passwordList <<"123" <<"123" <<"123";
// 给字段绑定相应的值 按照顺序进行绑定
query.addBindValue(accountList);
query.addBindValue(passwordList);
// 执行预处理命令
query.execBatch();