QT 是什么?
Qt Creator 是1999年由QT Company开发的跨平台c++图形界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台和服务器。
什么是开发框架?
简单理解就是库接口,但是这些库接口你必须要遵守他的规则才能使用。 所以叫框架!
- LibSourcey :用于实时的视频流和高性能网络应用程序的C++11 evented IO
- LibU : C语言写的多平台[工具库)
- Loki :C++库的设计,包括常见的设计模式和习语的实现。
- MiLi :只含头文件的小型C++库
- openFrameworks :开发C++工具包,用于创意性编码。
- Qt :跨平台的应用程序和用户界面框架 *************
- Reason :跨平台的框架,使开发者能够更容易地使用Java,.Net和Python,同时也满足了他们对C++性能和优势的需求。
- ROOT :具备所有功能的一系列面向对象的框架,能够非常高效地处理和分析大量的数据,为欧洲原子能研究机构所用。
- STLport:是STL具有代表性的版本
- STXXL:用于额外的大型数据集的标准模板库。
- Ultimate++ :C++跨平台快速应用程序开发框架
所以QT只是众多C++ 开发框架中的其中一个而已!
QT 的特点
QT 框架的特点就是跨平台性很强!几乎兼容所有的软硬件平台! 大大的提高开发效率!
创建第一个QT工程
1.创建QT—widget 应用程序
2.设置工程的名称与路径
注意:工程路径不能有中文名称
3.设置类名
4.选择编译器
5.编译测试
QT 工程的分析
xxx.pro 工程配置文件
#添加QT 模块,先有模块才有类
QT += core gui
#QT += core 核心模块,提供QT 信号与槽机制
#QT += gui 窗体模块
#QT += widgets 小部件模块 几乎所有的QT 工程都需要这三大模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#使用C++11 的语法进行编译
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
#设置源文件
SOURCES += \
main.cpp \
mywin.cpp
#设置头文件
HEADERS += \
mywin.h
#设置UI文件
FORMS += \
mywin.ui
# Default rules for deployment. 设置编译器的所在路径
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
xxx.h 头文件
#ifndef MYWIN_H
#define MYWIN_H //防止头文件重复定义 (包含)
//添加基类的头文件
#include <QMainWindow>
//定义一个命名空间,QT_BEGIN_NAMESPACE 与 QT_END_NAMESPACE ,QT 框架提供的用户关联UI文件
QT_BEGIN_NAMESPACE
namespace Ui { class mywin; } //目的把界面与代码分开!
QT_END_NAMESPACE
//定义一个 mywin 派生类: 继承基类QMainWindow,在mywin 中就可以调用QMainWindow 中的所有接口
class mywin : public QMainWindow
{
//信号与槽的宏定义,QT对象与对象之间的通信机制
Q_OBJECT
public:
//构造函数
mywin(QWidget *parent = nullptr);
//析构函数
~mywin();
private:
//定义一个ui对象指针,指向当前的界面
Ui::mywin *ui;
};
#endif // MYWIN_H
main.cpp 主函数
//包含用户自定义的窗体头文件
#include "mywin.h"
//包含一个应用头文件
#include <QApplication>
//主函数
int main(int argc, char *argv[])
{
//创建一个QT 应用
QApplication a(argc, argv);
//在定义上定义一个自己的窗体
mywin w;
//显示窗体
w.show();
return a.exec(); //执行应用:处理并刷新窗体
}
xxx.cpp 窗体文件
#include "mywin.h"
//QT软件自动编写的一个头文件,里面包含了所有界面相关的操作
#include "ui_mywin.h"
//构造函数 //参数列表初始化 QMainWindow(parent) 基类
// ui(new Ui::mywin) 初始化UI 指针,指向堆空间
mywin::mywin(QWidget *parent): QMainWindow(parent), ui(new Ui::mywin)
{
//调用ui->setupUi 函数 ??函数在哪里???
ui->setupUi(this); //系统自动根据 mywin.ui 文件自动生成,
}
//析构函数
mywin::~mywin()
{
//删除堆空间
delete ui;
}
纯C++ 构造QT工程
1.新建一个C++工程
2.添加QT 模块
TEMPLATE = app
#添加QT 三大模块
QT += core gui widgets
CONFIG += c++11
SOURCES += \
main.cpp
3.创建窗体的代码
#include <iostream>
using namespace std;
//添加窗体头文件
#include <QMainWindow>
//添加QT 应用头文件
#include <QApplication>
//添加标签
#include <QLabel>
int main(int argc,char **argv)
{
cout << "Hello World!" << endl;
//定义一个QT 应用
QApplication app(argc,argv);
//新建一个窗体
QMainWindow w;
//设置窗体的大小
w.setFixedSize(800,480);
//设置标题
w.setWindowTitle("我的第一个QT程序");
//创建一个标签
QLabel lb(&w);
//设置标签的文字
lb.setText("姓名:刘德华");
//设置标签的位置
lb.setGeometry(350,100,100,100);
//创建一个标签
QLabel lb1(&w);
//设置标签的文字
lb1.setText("学号:1314520");
//设置标签的位置
lb1.setGeometry(350,200,100,100);
//创建一个标签
QLabel lb2(&w);
//设置标签的文字
lb2.setText("电话:1314666777");
//设置标签的位置
lb2.setGeometry(350,300,100,100);
//显示一个窗体
w.show();
return app.exec(); //执行应用
//练习:在QT 中创建一个C++ 工程,并调用QT 库,显示自己的姓名学号电话在 屏幕中央!
}
QT_UI文件使用
属性的调整
字体调整
对象选择
调用UI中的控件
//构造函数
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
//设置界面的属性
ui->setupUi(this);
//界面->标签->设置文件("???");
ui->label->setText("我很好,下午好");
}
QT 帮助文档的使用
QString 类的使用
常用接口:
//定义一个字符串类
QString str="下午好";
//字符串追加
QString &append(const char *str)
//从末尾删除n个字符
void QString::chop(int n)
//判断字符串中是否包含某个字符
bool QString::contains(const QString &str) const
//统计字符中字符串中出现的次数
int QString::count(const QString &str) const
//字符串查找
int QString::indexOf(const QString &str, int from = 0) const
//从末尾开始查找
int QString::lastIndexOf(const QString &str, int from = -1) const
//插入一个字符串
QString &QString::insert(int position, const QString &str)
//取中间字符
QString QString::mid(int position, int n = -1) const
//字符串删除
QString &remove(const QString &str)
//字符串替换
QString &replace(const QString &before, const QString &after)
//字符串切割
QStringList ls = str.split("/");
类型转换
把QString 转换为整形数据
double toDouble(bool *ok = nullptr) const
float toFloat(bool *ok = nullptr) const
int toInt(bool *ok = nullptr, int base = 10) const
把QString 转换为 char *
//打开一个文件
FILE *fp = fopen("my.txt","w+");
QString data="2022-9-29-15-54";
fprintf(fp,"%s",data.toUtf8().data());
//关闭文件
fclose(fp);
把整形转换 为 QString 类型
QString data = QString::number(10086);
QString data = QString::asprintf("%s-%d-%f","hello",10086,3.14);
QString 类的拼接
QString str = QString("%1 - %2 + %3").arg("HELLO").arg(100).arg(3.14);
qDebug() << str;
QT 信号与槽初探
1.注册信号与槽
2.输入框的使用
获取输入框的信息 :
QString msg = ui->lineEdit->text();