Qt概述
Qt:是一个跨平台的C++图形用户界面应用程序框架
- 完全面向对象的,容易扩展,并允许真正的组件开发
Qt快捷键
-
注释:Ctrl+/
-
运行:Ctrl+r
-
编译:Ctrl+b
-
字体缩放:Ctrl+鼠标滚轮
-
查找:Ctrl+f
-
整行移动:Ctrl+shift+上下移动键
-
帮助文档:F1
-
自动对齐:Ctrl+i
-
同名文件.h和.app文件之间的切换:F4
-
帮助文档
- 第一种方式 F1
- 第二种 左侧按钮
- 第三种 C:\Qt\Qt5.6.0\5.6\mingw49_32\bin
Qt模块
- core:源代码
- GUI:界面支持
- widgets:窗体支持
- network:网络模块
- sql:数据库模块.
- Serial:串口编程
- multimedia:多媒体(音频、视频、摄像头)
创建QT程序
命名规范
- 类名 首字母大写,单词和单词之间首字母大写
- 函数名 变量名称 首字母小写,单词和单词之间首字母大写
main.cpp
#include "widget.h"
#include <QApplication> // 包含一个应用程序类的头文件
// main程序入口,argc命令行变量的数量,argv命令行变量的数量
int main(int argc, char *argv[])
{
// a应用程序对象,在qt中,应用程序对象有且仅有一个
QApplication a(argc, argv);
// 窗口对象,通过类来实例化一个窗口对象,Widget的父类为QWidget
Widget w;
// 窗口对象,默认不显示,只有调用show方法才显示
w.show();
// 让应用程序a,进入消息循环
// 消息循环,让当前代码阻塞到这行,点左上角的×才退出循环,
return a.exec();
}
运行结果为:
-
创建第一个Qt程序
- 点击创建项目后,选择项目路径以及 给项目起名称
- 名称 - 不能有中文 不能有空格
- 路径 - 不能有中文路径
- 默认创建有窗口类,myWidget,基类有三种选择: QWidget 、QMainWindow、QDialog
-
main函数
QApplication a
应用程序对象,有且仅有一个myWidget w
实例化窗口对象,默认不会显示出来,需要调用show方法显示w.show()
调用show函数 显示窗口return a.exec()
让应用程序对象进入消息循环机制中,代码阻塞到当前行
工程文件 ~project.pro
在工程文件中,除非你知道你所要添加的是什么,否则不要添加任何东西,注释也不要添加。
工程目录为
#-------------------------------------------------
#
# Project created by QtCreator 2018-01-05T09:31:24
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = 01_FirstProject
TEMPLATE = app
SOURCES += main.cpp\
mywidget.cpp \
mypushbutton.cpp
HEADERS += mywidget.h \
mypushbutton.h
-
QT += core gui
Qt包含的模块,添加核心组件 -
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
// 大于4版本以上 包含 widget模块 -
TARGET = 01_FirstProject
// target:目标 生成的.exe程序的名称
// 想换一个文件名只需把 = 后面的名称改了之后重新运行,重启后不会删除原来的而是创建一个新的名字为你的命名 -
TEMPLATE = app
// TEMPLATE模板 应用程序模板 Application -
app -建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。
-
lib - 建立一个库的makefile。
-
vcapp - 建立一个应用程序的VisualStudio项目文件。
-
vclib - 建立一个库的VisualStudio项目文件。
-
subdirs -这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。
-
SOURCES += main.cpp\
//源文件 mywidget.cpp
// 将文件添加到管理文件 -
HEADERS += mywidget.h
//头文件
头文件
#include <QWidget> //包含头文件 QWidget 窗口类
class myWidget : public QWidget // myWidget继承QWidget
{
Q_OBJECT // Q_OBJECT宏,允许类中使用信号和槽的机制
public:
myWidget(QWidget *parent = 0); //构造函数
~myWidget(); //析构函数
};
#endif // MYWIDGET_H
按钮创建QPushButton
#include < QPushButton >
//按钮控件的头文件- 创建按键:
QPushButton * 按键指针 = new QPushButton
- 显示按钮:
show()
// 调用show方法来显示窗口,但是他是以顶层的方式来弹出窗口setParent(this)
设置按钮的参数:
- 设置按钮内容:
按钮->setText(“要显示的内容”)
- 设置按钮位置:
按钮->move(a,b)
- 重新制定按钮大小:
按钮->resize(a,b)
设置窗口的参数:(按钮也可以调用下列方法) - 重置窗口大小:
resize(600,400);
- 设置固定窗口大小:
setFixedSize(a,b)
(生成的窗口是可以拖拽改变大小的,如果不想让他改变可以调用该方法) - 设置窗口标题:
setWindowTitle("标题内容")
#include "mywidget.h"
#include <QPushButton> //按钮控件的头文件
myWidget::myWidget(QWidget *parent): QWidget(parent)
{
//创建一个按钮
QPushButton * btn = new QPushButton;
btn->show(); //show以顶层方式弹出窗口控件,就是这个show会单独一个窗口
//让btn对象 依赖在 myWidget窗口中
btn->setParent(this);
//显示文本
btn->setText("第一个按钮");
旁边的小窗口就是以顶层方式弹出的窗口,它不会依附于主函数的大窗口。
依附于大窗口并显示文本的按钮运行结果:
- 也可以直接创建依附于主窗口的按钮
QPushButton * 名 = new QPushButton("按钮上显示的内容" , this )
//创建第二个按钮 按照控件的大小创建窗口
QPushButton * btn2 = new QPushButton("第二个按钮",this);
//移动btn2按钮
btn2->move(100,100);
// 使第二个按钮的位置在(100,,100)的位置
//重新制定按钮大小
btn2->resize(50,50);
//重置窗口大小
resize(600,400);
//设置固定窗口大小
setFixedSize(600,400);
//设置窗口标题
setWindowTitle("大大的窗口");
窗口标题会在这:
对象树
当创建的对象在堆区时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中。
这相当于,在创建QObject对象时,可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表。当父对象析构的时候,这个列表中的所有对象也会被析构。(注意,这里的父对象并不是继承意义上的父类!)
当创建的对象在堆区时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中。
一定程度上简化了内存回收机制
Qt窗口坐标体系
坐标体系:
以左上角为原点(0,0),X向右增加,Y向下增加。
对于嵌套窗口,其坐标是相对于父窗口来说的。
标签控件:QLabel
单行输入框:QLineEdit.
按钮控件:QPushButton.
当行输入框
头文件:#include <QLineEdit>
项目模块:QT += widgets