第一期
一. 按钮
//创建按钮对象
QPushButton *but=new QPushButton();
//设置父节点
but->setParent()
//设置字体
but->setText()
//按钮位置
but->move();
//设置窗口
Resize()
setFixedSize()
setWindowTitle()
二.对象树
1.堆栈简介
堆:由程序员分配管理的内存
栈:系统自动分配的内存,比如形参实参,返回值
2.当创建对象时,如果这个对象是QObject的子类,那么不用管理释放的操作,将对象放到对象树中
这在一定程度上简化了内存回收机制
理解:比如上述的按钮对象,指定了父亲为this以后,就可以实现对象树
三.坐标系
1.左上角为原点
2. x向右增加
3. y轴向左增加
四.信号和槽
1.阿拉丁神灯模拟
抽象对象
人,摩擦,灯,灯神,
2.关闭操作
按钮,点击,窗口,关闭
通过信号槽实现的优点
3.代码实现
connect(1,2,3,4)
参数1:信号的发送 myBtn
参数2:发送的信号 &MyPushButton::clicked
参数3:信号接受者 this
参数4:处理的函数 &myWidget::close
五.自定义信号与槽
1.自定义信号
写到signals下
返回void
需要声明,不需要实现
可以有参数,可以重载
2.自定义槽函数
返回void
需要声明,也需要实现
可以有参数,可以重载
写到public slot下或者public或者全局函数
3.自定义信号和槽穿线重载
-1需要利用函数指针 明确只想函数的地址
-2void(Teacher::*tSDognal)(QString)=&Teacher::hungry;
-3QString转成char*
情况1: .ToUtf8()转为QByteArray
情况2: QString转成QByteArray
六.实现信号与信号的连接
1.案例
点击按钮,触发下课
将两个信号连接
理解:信号和处理函数都是一个函数,二者可以互换
无参信号和槽连接(一个宏定义实现一个简称定义一个函数功能)
void(Student::*teacherSignal2)(void)=&Teacher::hungry
teacherSignal2可以作为一个参数传递
连接信号
connet()
disconnet()
七.信号槽的连接
1.信号可以连接信号
2.一个信号可以连接多个槽函数
3.多个信号可以连接同一个槽函数
4.信号和草哈数的参数 必须类型一一对应
5.参数个数是不是要一致? 信号的参数个数可以多余槽函数的参数个数
小结
第一时期主要学习一些简单的对象,函数以及函数连接
第二期
一.菜单栏
1.QMenuBar*bar=MenuBar()
2.setMenuBar(bar)
3.QMenu*fileMenu=bar->addMenu("文件") 创建菜单
4.QAction*newAction=fileMenu->addAction("新建"); 创建菜单项
二.工具栏
1.QToolBar*toolbar=new QToolBar(this);
2.addTppBar(默认停靠区域,toolbar);
Qt::LeftToolBarArea
3.设置 后期停靠区域,设置浮动,设置移动
4.天假菜单项 或者添加小控件
三.状态栏
1.QStatusBar*stBar=statusBar();
四.铆接部件 浮动窗口 可以多个
1.
QDockWidget
2.
addDockWidget(默认定考区域,浮动窗口指针)
4. 设置后期停靠区域
5. 设置核心
setCentraWidget(edit)
五.资源文件
1.将资源文件拷贝到项目位置下
2.右键项目->添加新文件->Qt->Qt recourse File->给资源文件起名
3.res 生成res.qrc
4.open in editor 编辑资源
5.添加前缀 添加文件
6.使用 “:+前缀名+文件名”
六.对话框和非模态对话框创建
七.消息对话框
1.模态对话框 不可对其他窗口进行操作
QDialog dlg(this);
dlg1->resize(200,100);
dlg1->show();
2.非模态对话框 可对其他窗口进行操作
防止一闪而过,创建到堆区
QDialog *dlg2=new QDialog(this);
dlg2->resize(200,100);
dlg2->show();
qDebug()<<"模态对话框弹出了"
3.标准对话框 -新消息对话框
-1.QMessageBox 静态消息函数 创建对话框
-2.错误,消息提问,警告
-3.参数1 父亲
参数2标题
参数3 显示内容
参数4 案件类型
参数5
默认关联回车
-4.返回值
StandardButton类型,利用返回值判断用户的输入
-5.实例
QMessageBox::warning(this,"warning","警告")
4.其他对话框
-1颜色对话框
QColorDialog::getColor
QColor color=QColorDialog::getColor(QColor(255,0,0))
-2文件对话框
QFileDialog::getOpenFileName(父亲,标题,默认路径,过滤文件)
QString str =QFileDialog::getOpenFileName(父亲,标题,默认路径,过滤文件)
-3字体对话框
QFontDialog::getFont
bool flag;
QFont font=QFontDialog::getFont(&flag,QFont("华文彩云",36));
Qstring转char*
.ToUtf8().data()
八.登录窗口布局
一些简单的ui操作.
选择对象,点击布局
九.按钮-控件
1.icon
添加图片资源
2.autoRaise
自动浮动效果
3.RadioButton
单选框,单选钮
ui->rBtnMan->setChecked(true);
默认选中男
connect(ui->rBtnWoman,&QRadioButton::clicked,[=](){
qDebug()<<"选中女";
})
通过一个bool 并连接实现单选与数据的同步
4.多选框
connect(ui->cBox,&QCheckBox::stateCheckBox::stateChanged,[=](int state){
qDebug()<<state;
})
未选0 半选是1(需要选中tristate) 全选2
十.QListWidget控件
1.QListWidgetitem* item 一行内容
2.ui->listWidget->additemm(item)
3.设置居中方式item->srtTextAlignment(Qt::AliognHCenter);
4.可以利用additems 一次性添加整个诗的内容
十一.QTreeWidget控件
ui->treeWidget->setHeaderLables(QStringList()<<"英雄"<<"英雄介绍")
QTreeWidgetItem*liItem=new QTreeWidgetItem(QStringList()<<"力量")
QTreeWidgetItem*zhiItem=new QTreeWidgetItem(QStringList()<<"智力")
QTreeWidgetItem*minItem=new QTreeWidgetItem(QStringList()<<"敏捷")
//添加顶层节点
ui->treeWudget->addTopLevelItem(liItem);
ui->treeWudget->addTopLevelItem(zhiItem);
ui->treeWudget->addTopLevelItem(minItem);
//追加子节点
QStringList heroL1;
herooL1<<刚被猪<<"前排";
QTreeWidgetItem*l1=new QTreeWidgetItem(heroL1);
liItem->addChild(l1);
十二.QTbleWidget控件
1.设置列数
ui->tableWidget->setColumnCount(3);
2.设置水平表头
ui->tableWWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄")
ui->tableWidget->setRowCount(5);
//设置第一行第一列
ui->tableWidget->setItem(0,0,new QTableWidgetItem("亚瑟"));
十三.其他控件
Scroll Area
Tool Box
Tab Widget
第二期总结
这一期主要学习了窗口的ui组件,偏向用户界面
第三期
一.事件
1.鼠标事件
2.鼠标进入事件 enterEvent()
3.鼠标离开事件 levelEvent()
4.鼠标按下 mousePresSEvent(QMouseEvent ev)
5.鼠标释放 mouseRwleaseEvent(QMouseEvent ev)
6.鼠标移动 mouseMoveEvent(QMouseEvent ev)
7.ev->x()x坐标 ev->y() y坐标
8..ev->button()可以判断所有案件 Qt::LeftButton Qt::RightButton
9.ev->buttton()判断组合案件 判断move时候的左右键 结合&操作符
10.格式化字符串
QString("%1 %2").arg(111).arg(222)
二.定时器一
startTimer(1000);
void widget::timerEvent(QTimeEvent*){
static int num=1;
ui->lable_2->setText(QString::number(num++));
}
多个计时器的实现,依赖于ev的timeID
三.定时器二
1.定时器类QTimer
2.创建
QTimer*timer=new QTiemre(this)
3.启动
timer->start(1000)
4.监听
5.暂停
timer->stop
四.事件过滤器
1.在程序将时间分发到事件分发器钱,可以利用过滤器做拦截
2.步骤
-1给控件安装事件过滤器
-2重写eventFiLter函数(obj,ev)
五.绘画
1.画图形
Qpainter painter(this);
OPen pen()
//设置画笔颜色
QPen pen(QColer(255,0,0));
//设置宽度
pen.setWidth(3);
//画家开始开始使用笔
pen.setPen(pen);
//设置画刷
QBrush brush(Qt::cyan);
brush.setStyle(Qt::Dense7Pattern);
painter.setBrush(brush);
//划线
painter.drawLine(QPoint(0,0),QPoint(100,100));
//画圆
painter.drawEllipse(QPoint(0,0),50,50);
//画矩形
painter.drawRect(QRect(20,20,50,50));
//画文字
painter.drawText(QRect(10,200,150,50),"好好学习");
六.绘画进阶
1.抗锯齿
Qpainter painter(this);
//抗锯齿
painter.setRenderHint(QPaninter:Antialiasing);
painter.drawEllipse(QPoint(0,0),50,50);
2.对玩家进行移动
1.painter.transtate(100,0);
2.保存
save
3.还原
restore
4.手动调用(利用文件资源画图)
painter.drawPixmap(20,0,QPixmap(add));
七.QFile文件读写
1.读文件
设置打开方式
//按照路径打开,方式为只读
QFile file(path);
file.open(QIOdEVICE::ReadOnly/Append);
2.写文件
file.write("aaa");
file.close();
3.读取文件信息
-1
QFileInfo info(路径)
-2 info参数
size()
suffix()
created().toString()
lastModified().toString()
第三期总结
学习了事件,绘画,文件操作