QT介绍
- QT主要用于图形化界面的开发,QT是基于C++编写的一套界面相关的类库,进程线程库,网络编程的库,数据库操作的库,文件操作的库…
- QT是一个跨平台的GUI图形化界面开发工具
QT的优点
- 跨平台,具有较为完备的图形开发库,所能想到的图形的实现基本都有,比window的MFC的库更强大
- 接口的封装性好,易上手,学习QT框架对学习计算机图形框架有很重要的参考意义
- QT内部基本上有一套自己的简易好用的内存回收机制,对提高C++水平有帮助
- 有很好的社区环境,市场份额在缓慢上升
- 轻量级的开发环境,可以做嵌入式开发
练习
完成一个登录界面的界面组件设置
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton> //按钮组件头文件
#include <QLabel> //标签组件头文件
#include <QLineEdit> //行编辑器组件头文件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//设置窗口
this->resize(540,410); //设置窗口大小
this->setWindowTitle("奕书聊天室");//设置窗口标题
this->setWindowIcon(QIcon("C:\\Users\\W\\Desktop\\icon\\wodepeizhenshi.png"));
//设置登录按钮组件
QPushButton *btn1 = new QPushButton(QIcon("C:\\Users\\W\\Desktop\\icon\\login.png"),
"登录",
this);//设置按钮组件的图标,文本内容,和让其在当前界面显示
btn1->move(240,340); //设置按钮组件的位置
btn1->resize(80,40); //设置按钮组件的大小
// btn1->setEnabled(false); //设置按钮不可点击
//设置取消按钮组件
QPushButton *btn2 = new QPushButton(QIcon("C:\\Users\\W\\Desktop\\icon\\cancel.png"),
"取消",
this);//设置按钮组件的图标,文本内容,和让其在当前界面显示
btn2->move(340,340);
btn2->resize(80,40);
// btn2->setEnabled(false);
//设置LOGO
QLabel *lab1 = new QLabel(this);
lab1->setPixmap(QPixmap("C:\\Users\\W\\Desktop\\1.png"));
lab1->resize(540,180);
lab1->setScaledContents(true);
//设置行编辑器 账号
QLineEdit * edit1 = new QLineEdit(this);
edit1->resize(220,40);
edit1->move(180,220);
edit1->setPlaceholderText("QQ号码/手机/邮箱");//设置占位符
//edit1->setEchoMode(QLineEdit::Password);
//设置行编辑器 密码
QLineEdit * edit2 = new QLineEdit(this);
edit2->resize(220,40);
edit2->move(180,280);
edit2->setPlaceholderText("密码");//设置占位符
edit2->setEchoMode(QLineEdit::Password);//设置密文显示
//设置账号的LOGO
QLabel *lab2 = new QLabel(this);
lab2->setPixmap(QPixmap("C:\\Users\\W\\Desktop\\icon\\userName.jpg"));
lab2->resize(50,40);
lab2->move(edit1->x()-85,edit1->y());
lab2->setScaledContents(true); //设置图片内容自适应
//设置账号的LOGO
QLabel *lab3 = new QLabel(this);
lab3->setPixmap(QPixmap("C:\\Users\\W\\Desktop\\icon\\passwd.jpg"));
lab3->resize(50,40);
lab3->move(edit2->x()-85,edit2->y());
lab3->setScaledContents(true); //设置图片内容自适应
}
MainWindow::~MainWindow()
{
delete ui;
}
对QT编写文件进行注释理解
.pro文件
QT += core gui
#在进行编程时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下的文件)
SOURCES += \
main.cpp \
mywindow.cpp
#用来管理头文件(Headers下的文件)
HEADERS += \
mywindow.h
#用来管理ui文件(Froms下的文件)
FORMS += \
mywindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
.h文件
#ifndef MYWINDOW_H
#define MYWINDOW_H //防止头文件重复
#include <QWidget> //QWidget类所在的头文件,父类头文件
QT_BEGIN_NAMESPACE
namespace Ui { class Mywindow; } //命名空间的声明
QT_END_NAMESPACE
//定义属于自己的类,Mywindow是类名,公共继承于QWidget
class Mywindow : public QWidget
{
Q_OBJECT //信号与槽的元对象
public:
Mywindow(QWidget *parent = nullptr); //声明构造函数,并定义一个默认参数
~Mywindow(); //声明析构函数
private:
Ui::Mywindow *ui; //通过ui指针查找ui界面中的组件
};
#endif // MYWINDOW_H
mywindow.cpp文件
#include "mywindow.h" //头文件
#include "ui_mywindow.h" //ui界面对应的头文件
//构造函数的定义
Mywindow::Mywindow(QWidget *parent)
: QWidget(parent) //显性调用父类的构造函数完成子类从父类继承的成员的初始化
, ui(new Ui::Mywindow) //对类中的指针成员开辟空间
{
ui->setupUi(this); //为ui界面中拖拽出来的组件开辟空间
}
Mywindow::~Mywindow() //定义析构函数
{
delete ui; //释放ui指针
}
main.cpp文件
#include "mywindow.h" //头文件
#include <QApplication> //应用程序的头文件
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //实例化一个应用程序的对象,调用有参构造
Mywindow w; //在栈区实例化一个类对象
w.show(); //调用show函数展示界面,是父函数提供的QWidget
return a.exec();//为了阻塞界面不被关系,等待相关事情的发生
//等待信号与槽、事件处理、等待用户操作
}