QT一段时间的学习总结

QT一段时间的学习总结
第一天:
1 QT简介
1.1 跨平台图形界面引擎
1.2 优点
1.2.1 跨平台
1.2.2 接口简单,容易上手
1.2.3 一定程度上简化了内容的回收
1.3 版本
1.3.1 商业版
1.3.2 开原版
2 创建第一个程序
2.1 点击创建项目后,选择项目路径,给项目起名
2.2 名称 不能有中文,不能有空格
2.3 路径 不能有中文
2.4 默认创建有窗口类,MyWiget,基类有三种选择:Qwidget,QMainWindow,QDialog
2.5 Main函数
2.5.1 QApplication a,应用程序对象,有且仅有一个
2.5.2 myWidget w,实例化窗口对象
2.5.3 w.show()调用show函数来显示窗口
2.5.4 return a.exec()让应用程序对象进入消息循环机制中,代码堵塞到当前行
3
QT += core gui //QT包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets//大于4版本以上才包含widget模块
TARGET = Qt_first_widjet//对象 生成的.exe程序的名称
TEMPLATE = app//模板 应用程序模板 Application
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES +=
main.cpp
mywidget.cpp
HEADERS +=
mywidget.h
4
快捷键 ctrl+/
//运行 ctrl+R
//编译 ctrl+b
//查找 ctrl+f
//整行移动 ctrl+shift+上或下
//自动对齐 ctrl+i;
//同名之间的.h与.cpp之间的切换 F4
//帮助文档 F1

5 控件常见应用
5.1 创建QPushButton *btn = QPushbutton
5.2 设置父亲 setParent(this)
5.3 设置文本 setText(“文字”)
5.4 设置位置 move(宽,高)
5.5 设置窗口标题 setWindowTitle
5.6 设置窗口的固定大小 setFixedSize
6 对象树
6.1 当创建的对象在堆区,如果指定的parent是Object的派生或子类可以不用管理释放操作,对象会被放入到对象树种。
6.2 一定程度上简化了内存的回收机制
7 QT中的坐标系
7.1 左上角为0,0点
7.2 X往右为正方向
7.3 Y往下为正方向
8 信号和槽

Connect(信号的发出者,发送的信号,信号的接收者,信号的处理(槽))
信号槽的优点:松散耦合(信号的发送端和接收端本身是没有关联的,通过connect将两端耦合在一起)
8.1 参数1 信号的发送者 参数2 发送的信号(函数的地址) 参数3 信号的接受者 参数4 处理的槽函数(函数的地址)
8.2 connect(btn,&QPushButton::clicked,this,&QWidget::close);
9 自定义信号与槽
9.1 自定义信号:
9.1.1 返回值为void
9.1.2 写到signals下
9.1.3 只需要声明,不需要实现
9.1.4 可以有参数,可以重载
9.2 自定义槽函数
9.2.1 需要声明,需要实现
9.2.2 可以有参数
9.2.3 返回值为void
9.2.4 也可以写到public slot,全局函数和public下
9.3 触发自定义信号
9.3.1 Emit 自定义信号
9.4 案例:下课后,老是饿了,学生请客吃饭
10 当自定义信号和槽出现重载
10.1 需要利用函数指针明确的指向函数的地址
10.2 void(teacher:: teacherSignal)(QString) = &teacher::hungry;
10.3 QString转为char

10.3.1 .toUtf8()转为ByteArray
10.3.2 .data()转为char*
10.4 信号可以连接信号
10.5 断开信号和槽或信号的连接disconnect
11 拓展
11.1 拓展
11.2 信号可以连接信号
11.3 一个信号可以连接多个槽函数
11.4 多个信号可以连接同一个槽函数
11.5 信号和槽函数的参数类型必须一一对应
11.6 信号和槽的参数个数,是不是要一致?信号的参数个数可以对于槽函数参数个数
12 QT4版本的写法
12.1 Connect(信号的发送者,发送的信号 SIGNAL(信号),信号的接受者,槽函数 SLOT(槽函数))
12.2 QT4版本以前的信号和槽的连接方式,QT5支持4的写法,反之不行
12.3 优点:参数直观。缺点:编译器对参数类型不做检测
13 Lamda表达式
13.1 []标志符 匿名函数
13.1.1 =值传递
13.1.2 &引用传递
13.2 ()参数
13.3 {}实现体
13.4 Mutable 修饰值传递变量,可以改变拷贝出的数据,但改变不了本体
13.5 返回值 ->int{return 返回值;}

第二天:
1 QMainWindow
1.1 菜单栏最多只有一个
1.1.1 QMenuBar *bar = menuBar();
1.1.2 setMenuBar(bar);
1.1.3 QMenu *filemenue = bar->addMenu(“文件”); 创建文件
1.1.4 QAction *newAction = filemenue->addAction(“新建”); 创建菜单项
1.1.5 添加分隔线 filemenue->addSeparator();
1.2 工具栏
1.2.1 QToolBar *toolbar = new QToolBar(this);
1.2.2 addToolBar(默认停靠区域:Qt::LeftToolBarArea,toolbar);
1.2.3 设置 后期停靠区域,设置浮动,设置移动
1.2.4 添加菜单项或者添加一个小控件
1.3 状态栏
1.3.1 QStatusBar *sBar = statusBar();
1.3.2 设置到窗口中 setStatusBar(sBar);
1.3.3 sBar->addWidget(label); 放左侧信息
1.3.4 sBar->addPermanentWidget(label2); 放右侧信息
1.4 铆接部件(浮动窗口)
1.4.1 QDockWidget
1.4.2 addDockWidget(默认停靠区域,指针);
1.4.3 设置后期停靠的区域
dockwidget->setAllowedAreas(Qt::BottomDockWidgetArea|Qt::TopDockWidgetArea);
1.5 设置核心部件 只能有一个
1.5.1 QTextEdit *textedit = new QTextEdit(this);
1.5.2 setCentralWidget(textedit);
2 资源文件
2.1 将图片文件拷贝到项目位置下
2.2 右键项目->添加新文件->Qt->Qt Resource file->给资源文件起名
2.3 res生成res.qrc
2.4 open in editor 编辑文件
2.5 添加前缀 添加文件
2.6 使用 “:+前缀名+文件名称”
3 对话框
3.1 模态对话框 不可以对其他窗口进行操作
3.1.1 QDialog dig(this);
3.1.2 dig.exec();
3.2 非模态对话框 可以对其他窗口进行操作
3.2.1 防止一闪而过 创建到了堆区 QDialog *dig2 = new QDialog(this);
3.2.2 dig2->show();
3.2.3 dig2->setAttribute(Qt::WA_DeleteOnClose);//55号 属性
3.3 标准对话框-消息对话框
3.3.1 QMessageBox 静态成员函数 创建对话框
3.3.2 错误、信息、提问、警告
3.3.3 参数1 父亲 参数2 标题 参数3 显示的内容 参数4 按键类型 参数5 默认关联回车按键
3.3.4 返回值是StanderdBotton类型,可利用返回值判断用户的输入
3.4 其他标准对话框
3.4.1 颜色对话框 QColorDialog::getColor
3.4.2 文件对话框 QFileDialog::getOpenFileName(父亲,标题,默认路径,过滤)
3.4.3 字体对话框 QFontDialog::getFont();
4 界面布局
4.1 实现登录窗口
4.2 利用布局的方式对窗口进行美化
4.3 选取widget进行布局,水平布局,垂直布局,栅格布局
4.4 给用户名、密码、登录、退出按钮进行布局
4.5 默认窗口和控件之间有9间隙,可以调整layoutleftmargin
4.6 利用弹簧进行布局
5 控件
5.1 按钮组
5.1.1 QPushButton 常用按钮
5.1.2 QToolButton 工具按钮 用于显示图片,如同时想显示文字,修改风格toolbuttonstyle,凸起风格 autorise
5.1.3 Radiobutton 单选按钮,设置默认ui->rbtnman->setChecked(true);
5.1.4 Checkbox多选按钮,监听状态,2 选中,1 半选,0 未选
5.2 QListWidget列表容器
5.2.1 QListWidgetItem一行内容
5.2.2 ui->listWidget->addItem(Item);
5.2.3 设置居中的方式 Item->setTextAlignment(4);
5.2.4 可以利用addItems()一次性添加整首诗,但无法居中
5.3 Qtreewidget
5.3.1 设置水平头
5.3.1.1 ui->treeWidget->setHeaderLabels(QStringList()<<“英雄”<<“英雄的简介”);
5.3.2 创建根节点
5.3.2.1 QTreeWidgetItem * LiItem = new QTreeWidgetItem(QStringList()<<“力量”);
5.3.3 添加根节点到树控件上
5.3.3.1 ui->treeWidget->addTopLevelItem(LiItem);
5.3.4 添加子节点
5.3.4.1 QTreeWidgetItem *I1 = new QTreeWidgetItem(hero1);
5.4 QTableWidget表格控件
5.4.1 设置列数
5.4.1.1 ui->tableWidget->setColumnCount(3);
5.4.2 设置水平表头
5.4.2.1 ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<“姓名”<<“性别”<<“年龄”);
5.4.3 设置行数
5.4.3.1 ui->tableWidget->setRowCount(5);
5.4.4 设置正文
5.4.4.1 ui->tableWidget->setItem(0,0,new QTableWidgetItem(“亚瑟”));
5.5 其他空间介绍
5.5.1 stackedWidget栈控件
5.5.1.1 ui->stackedWidget->setCurrentIndex(0);
5.5.2 comboBox下拉框
5.5.2.1 ui->comboBox->addItem(“宝马”);
5.5.3 QLabel 显示图片
5.5.3.1 SetPixmap
5.5.4 QLabel 显示动图(.gif图片)
5.5.4.1 ui->lal->setMovie(movie);
5.5.4.2 movie->start();
6 判断胜利
6.1 PlayScenes中添加一个isWin的标志来判断是否胜利
6.2 如果胜利了,打印胜利的信息
6.3 将所有的按钮屏蔽点击
7

1 自定义控件封装
1.1 添加新文件- QT –设计师界面(.h,.cpp,.ui)
1.2 .ui中设计QSpinBox和QSlider两个控件组成一个控件
1.3 Widget中使用自定义控件,拖拽了一个widget,点击提升为,点击添加,点击提升
1.4 实现功能:改变数字,滑动条跟着移动,信号槽的监听
1.5 提供getNum和SetNum对外的接口
1.6 接口测试
2 Qt中的事件
2.1 鼠标事件
2.2 鼠标进入事件 QEnterEvent
2.3 鼠标离开事件 QLeaveEvent
2.4 鼠标按下 mousePressEvent(QMouseEvent *ev);
2.5 鼠标移动 mouseMoveEvent
2.6 鼠标释放 mouseReleaseEvent
2.7 ev->x() x坐标 ev->y() y坐标
2.8 ev->button 判断左右键 Qt::LeftButton Qt::RightButton
2.9 ev->buttons()判断组合按键 判断move时候的左右键 结合&操作符
2.10 格式化字符串 QString(“%1 %2”).arg(111).arg(222)
QString str = QString(“鼠标按下 x = %1 y = %2”).arg(ev->x()).arg(ev->y());
3 定时器
3.1 利用事件void timerEvent(QTimerEvent *event)
3.2 启动定时器 startTimer(1000);单位:毫秒
3.3 timerEvent的返回值是定时器的唯一标志,可以用event->timerid做比较判断
4 定时器2
4.1 利用定时器类 QTimer
4.2 创建定时器对象 QTimer *timer = new QTimer(this);
4.3 启动定时器 timer->start(500);
4.4 每隔一定毫秒数,发送信号timeout,进行监听
4.5 暂停 timer->stop();
5 Event事件
5.1
5.2 用途:用于事件的分发
5.3 也可以用于拦截操作,但不建议
5.4 bool event(QEvent *e);
5.5 返回值如果是true 代表用户处理这个事件,不向下分发了
5.6 if(e->type()==QEvent::MouseButtonPress)用于判断
6 事件过滤器
6.1 在程序将事件分发到事件分发器之前,可以利用过滤器进行拦截
6.2 步骤
6.2.1 给控件安装事件过滤器
6.2.2 重写事件eventFilter(QObject *watched, QEvent *event)
6.3 QMouseEvent *ev = static_cast<QMouseEvent *>(event);//类型转换
7 Qpainter绘图
7.1 绘图事件 void paintEvent()
7.2 声明一个画家对象 QPainter painter(this)//this是指定绘图设备
7.3 画线、圆、矩形、文字
7.4 设置画笔 QPen 设置画笔的宽度风格
7.5 设置画刷 QBrush 设置画刷的风格
7.6
8 Qpainter高级设置
8.1 抗锯齿 效率低
8.1.1 painter.setRenderHint(QPainter::Antialiasing);
8.2 对画家进行移动
8.2.1 painter.translate(100,0); //移动画家
8.2.2 painter.save();//保存画家状态
8.2.3 painter.restore();//还原画家保存状态
8.3 如果想手动的调用绘图事件 利用update
8.4 利用画家图片 painter.drawPixmap(posx,100,80,50,QPixmap(":/Saved Pictures/20150218134618_cW8vN.jpg"));
9 QPainterDevice
9.1 QPixmap QImage QBitmap(黑白色) QPicture
9.2 QPixmap对不同的平台做了显示的优化
9.2.1 QPixmap pix(300,300);
9.2.2 pix.fill(Qt::white); //填充颜色
9.2.3 QPainter painter(&pix); painter.drawEllipse(QPoint(100,100),50,50);利用画家在Pix上画画
9.2.4 image.save(“路径”);//保存
9.3 QImage 可以对像素进行访问
9.3.1 使用和QPixmap差不多,但多了一个选择颜色的值 QImage image(300,300,QImage::Format_RGB32);
9.3.2 其他流程和QPixmap一样
9.3.3 可以对像素进行修改 img.setPixel(i,j,value);
9.4 QPicture 记录和重现绘图的指令
9.4.1 QPicture pic;
9.4.2 QPainter painter;
9.4.3 painter.begin(&pic);
9.4.4 保存pic.save(任意后缀名)
9.4.5 重现 利用画家可以重现
10 QFile对文件进行读写
10.1 QFile进行文件读写操作
10.2 QFile file(path);//参数就是读取文件的路径
10.3 file.open(QIODevice::ReadOnly); //设置打开方式
10.4 读
10.4.1 QByteArray array = file.readAll(); //全部读取
10.4.2 QByteArray array;
while(!file.atEnd()){//判断是否读到文件尾
array += file.readLine();//按行读取
}
10.4.3 默认支持的编码格式utf-8
10.4.4 利用编码格式类 指定格式 QTextCodec *codec = QTextCodec::codecForName(“gbk”);
10.4.5 ui->textEdit->setText(codec->toUnicode(array));
10.4.6 关闭文件对象 file.close
10.5 写
10.5.1 file.open(QIODevice::Append);//利用追加的方式进行写操作
10.5.2 file.write(“内容”);
10.5.3 file.close//关闭文件对象
11 利用QFileInfor 读取文件信息
11.1 QFileInfo infor(路径);
11.2 qDebug()<<“大小:”<<infor.size()<<“文件的后缀名:”<<infor.suffix()<<“文件的名称:”<<infor.fileName()<<“文件路径”<<infor.filePath();
11.3 qDebug()<<“创建日期:”<<infor.created().toString(“yyyy/MM/dd hh:mm:ss”);
11.4 qDebug()<<“最后修改”<<infor.lastModified().toString(“yyyy-MMMM-dd hh:mm:ss”);

1 Qt案例课程
1.1 项目简介
1.2 创建项目,添加项目资源
1.3 项目的基本配置
1.3.1 设置背景图标
1.3.2 设置固定大小
1.3.3 设置图片
1.3.4 设置项目标题
1.3.5 设置背景
1.3.6 背景标题
1.3.7 开始菜单、退出功能
1.4 创建开始按钮
1.4.1 封装自定义按钮MyPushButton
1.4.2 构造函数(默认显示图片 按下后显示的图片)
1.4.3 测试开始按钮
1.4.4 开始制作特效 zoom1向上跳 zoom2向下跳
1.5 创建选择关卡
1.5.1 点击开始按钮后 延时进入开始关卡
QTimer::singleShot(500,this,={
//自身隐藏
this->hide();
//显示选择关卡的场景
chosescene->show();
});
1.5.2 配置选择关卡场景(图标 标题 大小)
1.5.3 设置背景图片、设置标题图片
1.5.4 创建返回按钮
1.6 选择关卡的返回按钮的切换
1.6.1 点击后切换另一个图片
1.6.2 重写void mousePressEvent
1.6.3 重写 void mouseRleaseEvent
1.7 开始场景与选择关卡场景的切换
1.7.1 点击选择关卡场景的按钮,发送一个自定义信号
1.7.2 在主场景中监听这个信号,并且当触发信号后,重新显示主场景,隐藏掉选择关卡的场景
1.8 选择关卡中的按钮创建
1.8.1 利用一个for循环将所有的按钮布置到场景中
1.8.2 在按钮的上面设置一个标签显示关卡数
1.8.2.1 QLabel 设置大小、显示文字、对齐方式、鼠标穿透
1.8.3 给每个按钮监听点击事件
1.9 翻金币场景的创建
1.9.1 点击选择关卡按钮后,进入到翻金币的游戏场景
1.9.2 配置翻金币游戏场景,设置标题,图标,大小,设置背景
1.9.3 实现返回按钮,可以返回到上一个场景
1.9.4 实现三个场景之间的切换
1.10 显示关卡标签
1.10.1 在左下角显示玩家具体的关卡标签
1.10.2 QLabel创建 设置大小和位置 label->setGeometry(30,this->height()-50,120,50);
1.10.3 QFont font;设置字体 字号
QFont font;
font.setFamily(“华文新魏”);
font.setPointSize(20);
1.10.4 设置label的字体 setFont label->setFont(font);

翻金币

  1. 创建金币类
    1.1. 先将金币的背景图案 放入到Playscene中
    1.2. 创建一个MyCoin的金币按钮类
    1.3. MyCoin::MyCoin(QString btnImg) 构造函数传入默认显示的图片金币
    1.4. 在playscene中创建所有的金币按钮
  2. 每个关卡的默认显示
    2.1. 先引入dataconfig.h和dataconfig.cpp文件到项目中
    2.2. 在playscen中写了int gameArray[4][4]维护每个关卡的金币状态
    2.3. 初始化每个关卡的显示
  3. 金币翻转特效
    3.1. 给每个硬币加属性 posX 坐标X,posY 坐标Y,bool flag 正反面标识
    3.2. 给MyCoin加函数 changeFlag 改变标识函数
    3.2.1. 如果flag为true改为false,并且开启定时器1(正面翻反面)
    3.2.2. 如果flag为false改为true,并且开启定时器2(反面翻正面)
    3.2.3. 实现定时器中的内容
    3.3. 测试金币翻银币,银币翻金币
  4. 解决快速点击效果不好
    4.1. 在MyCoin中加入了isAnimation 判断是否正在做动画条件
    4.2. 当按下MyCoin判断是否在做动画,如果在做动画,直接return,保证金币和银币动画切换的完整效果
  5. 翻转周围的金币
    5.1. 点击金币后,延时翻转周围的金币
  6. 判断胜利
    6.1. Playscenes中添加isWin的标志,来判断是否胜利
    6.2. 如果胜利了,打印胜利信息
    6.3. 将所有的按钮屏蔽点击
  7. 胜利图片特效
    7.1. 将胜利图片放入到游戏场景中
    7.2. 当游戏胜利时,将其移动到屏幕中央,作为一个胜利的动画特效
  8. 添加音效资源
    8.1. QSound所属模块,QT += multimedia需要添加在.pro 文件中
    8.2. 在三个场景中添加音效
    8.3. QSound *winsound = new QSound(“LevelWinSound.wav”,this);
    8.4. 播放QSound->play();
    8.5. Winsound->setloops();//设置循环次数 -1代表无限次
  9. 项目的优化
    9.1. 将三个场景的位置保持一致
  10. 项目的打包发布以及游戏的扩展
已标记关键词 清除标记
相关推荐
<p> <strong><span style="font-size:20px;color:#FF0000;">本课程主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者</span></strong> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">1. 包含:<span style="color:#FFFF00;background-color:#FF0000;">项目源码、</span><span style="color:#FFFF00;background-color:#FF0000;">项目文档、数据库脚本、软件工具</span>等所有资料</span></strong></span> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">2. 手把手的带你从零开始部署运行本套系统</span></strong></span> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">3. 该项目附带的源码资料可作为毕设使用</span></strong></span> </p> <p> <span style="color:#FF0000;"><strong><span style="font-size:18px;">4. 提供技术答疑和远程协助指导</span></strong></span><strong><span style="font-size:18px;"></span></strong> </p> <p> <br /> </p> <p> <span style="font-size:18px;"><strong>项目运行截图:</strong></span> </p> <p> <strong><span style="font-size:18px;">1)系统登陆界面</span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241015433522.png" alt="" /><br /> </span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">2)学生模块</span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241015575966.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">3)教师模块</span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241016127898.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">4)系统管理员</span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241016281177.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202002241016369884.png" alt="" /></span></strong> </p> <p> <strong><span style="font-size:18px;"><br /> </span></strong> </p> <p> <strong><span style="font-size:18px;"><strong><span style="font-size:18px;">更多Java毕设项目请关注我的毕设系列课程 <a href="https://edu.csdn.net/lecturer/2104">https://edu.csdn.net/lecturer/2104</a></span></strong></span></strong> </p> <p> <strong><span style="font-size:18px;"><br /> </span></strong> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页