Qt第一天使用
1.创建项目
- 项目中项目名字不能有中文,路径中也不能有中文
- Qmainwindows是Qwidget和QDialog的父类,父类很多东西都不包含
- 版本控制系统-对团队开发起作用,
2. 代码解释
1.QT += core gui 、、包含的模块,所述的包含的类可以使用
2. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets// 4版本以上加入widgets
3. TARGET = QT_20190705//,目标 生成的.exe程序名称
4. TEMPLATE = app // 模板
5. SOURCES...//源文件
6. HEADERS..//头文件
7. mian.cpp
- #include "widget.h" //头文件
#include <QApplication> // 应用程序类
// argc 命令行变量的数量 argv 命令行变量数组
QApplication a(argc, argv);//a应用程序对象,Qt中有且就有一个应用程序对象,获取操作,例如鼠标点击
Widget w; // 创建一个自定义窗口对象
w.show(); //窗口对象弹出函数
return a.exec();//进入消息循环机智,阻塞代码
8.
#ifndef WIDGET_H
#endif // WIDGET_H //防止头文件相互包含,类似于#program
#include <QWidget> //父类(基类)
Q_OBJECT// Q_OBJECT提供了Qt中的信号和槽的机制
3基本使用
3.1基本快捷键以及button控件使用展示
//widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
/*
* 命名规范
* 类名首字母大写 单词与单词之前首字母大写
* 函数,变量...首字母大写
* 常用快捷键
* ctrl +R 运行
* ctrl + B 编译
* F1 帮助文档 选中一个变量,按住F1
* 注释快捷键ctrl + /
* 字体的缩放 ctrl +鼠标滚轮
* 整行代码的移动 ctrl +shift + 上箭头或者下箭头
* 查找 ctrl + f
* 自动对齐 ctrl+ i
* 同名之间的.h和.cpp切换 ctrl + F4
* 帮助文档 F1,左侧列表,帮助文档另外的程序
*
*
*
*/
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QPushButton *btn = new QPushButton;
// btn->show();// 默认是用顶层的方式弹出窗口
//预期想要按钮依赖大窗口弹出
btn->setParent(this);//给button找一个父类
btn->setText("周五");
QPushButton *btn2 = new QPushButton("下雨");//在相同的位置会覆盖原来之前同位置的东西
btn2->setParent(this);
btn2->move(100,0);
this->resize(600,400);//设置窗口大小
this->setWindowTitle("fiist program");//设置窗口标题
this->setFixedSize(600,400); //设置窗体的固定大小
}
Widget::~Widget()
{
delete ui;
}
3.2对象树的概念及其创建顺序
- 在创建对象树的时候,如果父类是Qobject或者Qobject的派生类,这个对象可以不用去管理释放,会放到一个对象树上,析构函数会自动管理对象的释放
- 析构的顺序和释放的顺序是相反的
3.3Qt中的坐标系
左上角是(0,0)点,往右→增加,往下增加
3.4信号和槽的概念
connect(信号的发出者(指针),信号内容(地址),信号的接受者(指针),处理信号(槽函数地址))
connect(btn2,&QPushButton::clicked,this,&Widget::close);//
// 其中QPushButton换成其子类也可以,实现点击button2关闭窗口
- 信号槽的优点:松散耦合,将两个不想关的内容关联起来
3.5自定义信号的处理
- 各种信号和槽的写法
- 有参与无参数写法的区别(当信号槽发生重载了,就需要使用函数指针指明需要的槽函数的地址)
- 扩展
- 信号可以连接信号
- 一个信号可以连接多个槽函数
- 多个信号可以连接同一个槽函数
- 信号和槽的参数类型必须一一对应
- 信号的参数个数可以多余槽函数的个数,但是类型也必须一一对应
- 信号和槽可以断开连接
3.5Qt4版本以前信号和槽的写法
//缺点: 参数类型 不做检测,原因在于SIGNAL和SLOT括号下的内容转为字符串SIGNAL(“hungry(int))”)
//优点: 参数类型比较直观
connect(zt,SIGNAL(hungry(QString)),st,SLOT(treat(QString)));
// classover();
3.6 lambda表达式
[capture](parameters)mutable->return-type
{
statement;
}
[函数对象参数](操作符重载函数参数)mutable->返回值{函数体}
- 参数
* [] ,标识一个lambda的开始,必须存在,不能省略,函数对象参数是传递给编译器自动生成的函数对象类的构造函数,函数对象参数只能是哪些到定义lambda所在作用范围内可见的局部变量(包括lambda所在类的this)有以下形式
-空:没有使用任何函数对象参数。
- = :函数体可以使用lambda所在作用范围内所有可见的局部变量(包括lambda所在类的this),并且是以值传递的方式(相当于编译器自动帮我们按值传递了所有局部变量)
- & :函数体可以使用lambda所在作用范围内所有可见的局部变量(包括lambda所在类的this),并且是以引用传递的方式(相当于编译器自动帮我们按引用传递了所有局部变量)
- this :函数体内可以使用lambda所在类中的成员变量,和=差不多
- a :将a按照值进行传递。按值进行传递时,函数体内不能修改传递进来的a的拷贝,因为默认情况下函数时const的 ,要修改传递进来的a的拷贝,可以添加mutable修饰符,不能对其他变量进行修改
- &a: 将a 按照引用进行传递
- a,&b:a 按照值传递,b按照引用传递
- =,&a,&b:除a,b被引用传递外,其他参数按照值传递
- &,a,b:除a,b按照值传递,其他按照引用进行传递- ()操作符重载函数参数
标识重载的()操作符的参数,没有参数时,这部分可以省略,参数可以通过按值(如(a,b)) 和按引用(如:(&a,&b))两种方式进行传递 - 可修改标识符
mutable 声明,可省,按照值传递函数对象函数时,加上mutable修饰符后可以修改按值传递进来的拷贝(修改的是拷贝,而不是值本身) - ->(返回值)+类型
- CONFIG += c++11 对于qt4版本前的低版本使用lamdba表达式必须要加入的行配置信息
- ()操作符重载函数参数
4.QMainWindow
4.1 组成介绍
- 铆接部件:可以单独作为一部分窗口的部件
4.2 菜单栏、工具栏、状态栏、铆接部件,核心部件
- 菜单栏只能有一个
QMenuBar *bar = menuBar();
setMenuBar(bar); //设置到窗口中
QMenu*fileMenu = bar->addMenu("文件");
QMenu *editMenu = bar->addMenu("编辑");
//添加菜单项
QAction *newaction = fileMenu->addAction("新建");
//添加分割线
fileMenu->addSeparator();
QAction *openaction = fileMenu->addAction("打开");//返回一个QAction
- 工具栏
//工具栏 可以有多个
QToolBar * toolbar = new QToolBar(this);
//addToolBar(toolbar);默认上部分
addToolBar(Qt::LeftToolBarArea,toolbar);//第一个参数是枚举值,
toolbar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
toolbar->setFloatable(false);//设置浮动
toolbar->setMovable(false);//设置移动
//工具中添加小控件
QPushButton *btn = new QPushButton("按钮",this);
toolbar->addWidget(btn);
//工具栏中添加·菜单项
toolbar->addAction(newaction);
toolbar->addSeparator();
toolbar->addAction(openaction);
- 状态栏
//状态栏 只有一个
QStatusBar *statu = statusBar();
//将状态栏放入状态栏
setStatusBar(statu);
QLabel *lable = new QLabel("左侧信息",this);//一个专门显示文字的对象
//将标签 放入到 状态栏中
statu->addWidget(lable);
QLabel* lable2 = new QLabel("右侧信息",this);
statu->addPermanentWidget(lable2);//从右往左
- 铆接部件,浮动窗口
//铆接部件,浮动窗口 可以有多个
QDockWidget * dock = new QDockWidget("铆接部件",this);
addDockWidget(Qt::BottomDockWidgetArea, dock);// 放在核心部件的下面
// 可以设置停靠范围
dock->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
//this->addDockWidget(dock);
- 核心部件
//核心部件 只能有一个
QTextEdit * edit = new QTextEdit(this);
setCentralWidget(edit);
4.3 资源文件
- 将资源文件导入到项目中
- 添加文件 ->Qt->Qt recourse File
- 添加前缀,添加路径
- 使用
//在新建的菜单项上-显示图片
// ui->actionnew->setIcon(路径);
//资源文件 使用方式 " :+前缀名+文件名"
ui->actionnew->