QT道初解--翊镜

第一期

一. 按钮

//创建按钮对象

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()

第三期总结

学习了事件,绘画,文件操作

猜你喜欢

转载自blog.csdn.net/weixin_61743641/article/details/131843689