一、介绍QT
QT主要是用于图形化开发界面,是一套基于C++编写开发的一套类库
在汽车仪表盘、打印机、医疗器械、自动化的大型设备多种场合下被使用
二、QT工具介绍
Assistant --> QT类库的帮助手册的工具
Designer --> 用于设计图形化界面
QTcreater --> QT继承开发环境工具
三、Assistant帮助文档的使用
四、设计师界面的介绍
五、QT工程简介
1.配置文件
cpp
QT += core gui sql network
# QT工程所需的类库 core是核心库 gui图形化界面相关类库
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#版本超过4.0,会加上widgets
CONFIG += c++11
#该编译器支持C++11后的版本
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
#管理源文件
SOURCES += \
main.cpp \
mywnd.cpp
#管理头文件
HEADERS += \
mywnd.h
#管理ui文件
FORMS += \
mywnd.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
2.头文件
cpp
#ifndef MYWND_H
#define MYWND_H //防止文件重复包含
#include <QWidget> //QWidget类所在的头文件,父类头文件
QT_BEGIN_NAMESPACE
namespace Ui { class MyWnd; } //命名空间的声明
QT_END_NAMESPACE
//定义属于自己的类 MyWnd是类名,公共继承自QWidget
class MyWnd : public QWidget
{
Q_OBJECT //信号与槽的元对象
public:
MyWnd(QWidget *parent = nullptr); //构造函数的声明,有一个默认参数的形参
~MyWnd(); //析构函数额声明
private:
Ui::MyWnd *ui; //后期可以通过ui指针找到ui界面上拖拽出来的组件
};
#endif // MYWND_H
3.源文件
cpp
#include "mywnd.h" //自己的头文件
#include "ui_mywnd.h" //ui界面对应的头文件
MyWnd::MyWnd(QWidget *parent) //构造函数的定义
: QWidget(parent) //显性调用父类的构造函数完成对子类从父类继承下来成员的初始化工作
, ui(new Ui::MyWnd) //对自己类中的指针成员开辟空间
{
ui->setupUi(this); //给拖拽出来的组件实例化空间
}
MyWnd::~MyWnd() //析构函数的定义
{
delete ui; //释放ui指针的内存
}
4.主程序
cpp
#include "mywnd.h" //图形化界面的头文件
#include <QApplication> //应用程序的头文件
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //实例化一个应用程序的对象,调用的是有参构造
MyWnd w; //在栈区实例化自定义类的对象
w.show(); //调用show函数,展示图形化界面,该函数是父类提供的,直接用即可
return a.exec(); //为了阻塞界面不被关闭,等待相关事情发生
//等待信号与槽、事件处理、等待用户操作
}
5.各文件之间调用方式
六、设置QT界面
cpp
this->resize(QSize(800,600)); //使用匿名对象,调用重新设置尺寸函数
qDebug() << "size = " << this->size();
qDebug()<<"width = "<<this->width(); //输出组件宽度
qDebug()<<"height = "<<this->height(); //获取高度
//2、设置尺寸最值
this->setMaximumSize(1000,800); //设置最大尺寸
this->setMinimumSize(400,300); //设置最小尺寸
this->setFixedSize(540, 410); //设置固定尺寸
//3、窗口标题
qDebug()<<this->windowTitle();
this->setWindowTitle("My First Window");
qDebug()<<this->windowTitle();
//4、设置窗口的icon
this->setWindowIcon(QIcon("C:\\Users\\鹏程万里\\Desktop\\windowIcon.png"));
//5、设置背景色,一般使用样式表完成
this->setStyleSheet("background-color:skyblue;");
//6、设置窗口透明度
this->setWindowOpacity(0.8);
//8、设置纯净窗口
this->setWindowFlag(Qt::FramelessWindowHint);
//9、移动窗口位置
this->move(50,100);
七、常用类与组件
7.1信息调试类
qDebug (" %s","输出内容"); //类似printf
qDebug( ) << 输出内容; //类似cout
7.2按键组件
cpp
//1、使用无参构造添加一个按钮
QPushButton *btn1 = new QPushButton; //无参构造
//btn1->show();
btn1->setParent(this); //给组件指定父组件,让其依附于界面而存在
btn1->setText("按钮1"); //给组件设置文本内容
qDebug()<<btn1->size(); //界面大小
btn1->resize(QSize(70,35)); //设置按钮组件的大小
btn1->move(200,0); //移动组件位置
btn1->setStyleSheet("background-color:red; " //设置样式表
"border-radius:10px; "
"color:white;");
//2、构造一个按钮时,指定父组件
QPushButton *btn2 = new QPushButton(this); //将当前界面设置成父组件
btn2->setText("按钮2");
btn2->resize(btn1->size()); //使用其他按钮的大小设置该组件的大小
btn2->move(btn1->x(), 80);
btn2->setEnabled(false);
btn2->setIcon(QIcon("C:/Users/鹏程万里/Desktop/windowIcon.png")); //设置图标
//3、构造按钮时给定文本内容以及父组件
QPushButton *btn3 = new QPushButton("按钮3", this);
btn3->resize(btn1->size());
btn3->move(btn2->x(), btn2->y()+50);
btn3->setIcon(QIcon("C:/Users/鹏程万里/Desktop/windowIcon.png"));
//4、构造一个按钮,构造时给定父组件、文本内容、icon
QPushButton *btn4 = new QPushButton(QIcon("C:/Users/鹏程万里/Desktop/windowIcon.png"),
"按钮4", this);
btn4->resize(btn1->size());
btn4->move(btn3->x(), btn3->y()+50);
7.3行编辑器
cpp
//1、构造一个行编辑器,构造时给定父组件
QLineEdit *edit1 = new QLineEdit(this);
//edit1->setText("请输入。。。"); //设置编辑器中的文本内容
edit1->setPlaceholderText("QQ/手机/邮箱"); //设置编辑器的占位文本
edit1->resize(200,40); //设置尺寸
edit1->move(btn1->x()+80, 0); //移动位置
edit1->setEnabled(false); //设置不可用状态
//2、构造一个行编辑器,构造时给定父组件以及文本内容
QLineEdit *edit2 = new QLineEdit("啦啦啦啦啦啦,我是卖报的小行家", this);
qDebug() << edit2->text(); //获取行编辑器中文本内容
edit2->resize(edit1->size());
edit2->move(edit1->x(), edit1->height()+40);
edit2->setEchoMode(QLineEdit::Password); //设置回显模式
7.4标签编辑器
cpp
QLineEdit *edit2 = new QLineEdit("llllll",this);
qDebug() << edit2 -> text();
edit2 -> resize(200,40);
edit2 -> move(edit1->x(),edit1->y()+50);
edit2 -> setEchoMode(QLineEdit::Password);
QLabel *lab1 = new QLabel("账号",this);
lab1 -> resize(50,50);
lab1 -> setStyleSheet("background-color:pink;"
"color:white;");
lab1 -> setPixmap(QPixmap("C:\\Users\\HP\\Desktop\\ME.png"));
lab1 -> setScaledContents(true);
完成一个登录界面
widget.h
cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QLineEdit>
#include <QPushButton>
#include <QDebug>
#include <QIcon>
#include <QLineEdit>
#include <QLabel>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
};
#endif // WIDGET_H
wiget.cpp
cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//设置页面
this -> resize(540,410);
this ->setFixedSize(540,410);
this -> setWindowTitle("weifeng client");
//this -> setStyleSheet("background-color:pink;");
this -> setWindowIcon(QIcon("C:\\Users\\HP\\Desktop\\ME.png"));
//设置登录按键
QPushButton *btn1 = new QPushButton("登录",this);
btn1 -> move(145,300);
btn1 -> resize(100,50);
btn1 -> setIcon(QIcon("C:\\Users\\HP\\Desktop\\16.gif"));
//设置取消按键
QPushButton *btn2 = new QPushButton("取消",this);
btn2 -> move(btn1 -> x()+150,btn1 -> y());
btn2 -> resize(100,50);
btn2 -> setIcon(QIcon("C:\\Users\\HP\\Desktop\\15.gif"));
//界面图
QLabel *lab1 = new QLabel(this);
lab1 -> resize(540,150);
lab1 -> setPixmap(QPixmap("C:\\Users\\HP\\Desktop\\starcat.png"));
lab1 -> setScaledContents(true);
//账号前图片
QLabel *lab2 = new QLabel(this);
lab2 -> resize(50,50);
lab2 -> move(145,175);
lab2 -> setPixmap(QPixmap("C:\\Users\\HP\\Desktop\\08.gif"));
lab2 -> setScaledContents(true);
//密码前图片
QLabel *lab3 = new QLabel(this);
lab3 -> resize(lab2 -> size());
lab3 -> move(lab2 -> x(),lab2 -> y()+50);
lab3 -> setPixmap(QPixmap("C:\\Users\\HP\\Desktop\\12.gif"));
lab3 -> setScaledContents(true);
//账号
QLabel *lab4 = new QLabel("账号",this);
lab4->setFixedHeight(30);
lab4 -> move(lab2 -> x()+55,lab2 -> y()+20);
//密码
QLabel *lab5 = new QLabel("密码",this);
lab5->setFixedHeight(30);
lab5 -> move(lab3 -> x()+55,lab3 -> y()+20);
//账号栏
QLineEdit *edit1 = new QLineEdit(this);
edit1 -> resize(140,lab4 -> height());
edit1->setFixedHeight(30);
edit1 -> move(lab4 -> x()+50,lab4 -> y());
edit1 -> setPlaceholderText("QQ/手机/邮箱");
//密码栏
QLineEdit *edit2 = new QLineEdit(this);
edit2 -> resize(140,lab5 -> height());
edit2->setFixedHeight(30);
edit2 -> move(lab5 -> x()+50,lab5 -> y());
edit2 -> setEchoMode(QLineEdit::Password);
edit2 -> setPlaceholderText("密码");
}
Widget::~Widget()
{
}
main.cpp
cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}