1.登录界面
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//固定窗口大小
this->setFixedSize(600, 560);
//设置窗口标题
this->setWindowTitle("hello");
//设置窗口图标
this->setWindowIcon(QIcon("C:/Users/asus/Desktop/icon/wodepeizhenshi.png"));
//有参构造一个标签,指定父组件,依附于此界面存在
QLabel *lab1 = new QLabel(this);
//设置大小
lab1->resize(600, 250);
//设置图片
lab1->setPixmap(QPixmap("C:/Users/asus/Desktop/icon/logo.png"));
//设置图片自适应
lab1->setScaledContents(true);
//有参构造一个标签,指定父组件
QLabel *lab2 = new QLabel(this);
//设置大小
lab2->resize(30, 30);
//设置图片
lab2->setPixmap(QPixmap("C:/Users/asus/Desktop/icon/userName.jpg"));
//设置图片自适应
lab2->setScaledContents(true);
//移动位置
lab2->move(140, 320);
//无参构造一个标签
QLabel *lab3 = new QLabel();
//设置指定父组件,依附此界面存在
lab3->setParent(this);
//设置大小
lab3->resize(30, 30);
//设置图片
lab3->setPixmap(QPixmap("C:/Users/asus/Desktop/icon/passwd.jpg"));
//设置图片自适应
lab3->setScaledContents(true);
//移动位置
lab3->move(lab2->x(), lab2->y()+80);
//无参构造一个行编辑器 QLineEdit
QLineEdit *Edit1 = new QLineEdit();
//指定父组件,让其依附于此界面存在
Edit1->setParent(this);
//设置大小
Edit1->resize(240, 40);
//设置背景色
Edit1->setStyleSheet("background-color:white; border: 1px solid gray; padding: 10px;");
//移动位置
Edit1->move(lab2->x()+80, lab2->y()-10);
//设置占位文本
Edit1->setPlaceholderText("QQ/手机/邮箱");
//有参构造一个行编辑器 QLineEdit
QLineEdit *Edit2 = new QLineEdit(this);
Edit2->resize(Edit1->size());
//设置北京四
Edit2->setStyleSheet("background-color:white; border: 1px solid gray; padding: 10px;");
//移动位置
Edit2->move(lab3->x()+80, lab3->y()-10);
//设置文本位置
Edit2->setPlaceholderText("密码");
//设置回显模式
Edit2->setEchoMode(QLineEdit::Password);
//有参构造一个命令按钮,初始化文本内容,指定父组件 QPushButton
QPushButton *btn1 = new QPushButton("登录", this);
//设置大小
btn1->resize(80, 40);
//移动位置
btn1->move(240, Edit2->y()+80);
//设置图片
btn1->setIcon(QIcon("C:/Users/asus/Desktop/icon/login.png"));
//有参构造一个命令按钮,初始化图标和文本内容,指定父组件QPushButton
QPushButton *btn2 = new QPushButton(QIcon("C:/Users/asus/Desktop/icon/cancel.png"), "取消", this);
//设置大小
btn2->resize(btn1->size());
//移动位置
btn2->move(btn1->x()+120, btn1->y());
}
Widget::~Widget()
{
delete ui;
}
2.QT工程项目各文件初始解析
1.配置文件.pro文件
#QT工程所需要的类库,core:核心库 gui:图形化界面相关的库 sql:数据库 network:网络库
QT += core gui
#版本超过4.0后,尾部自动添加widgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#该编译器支持c++11及后的版本
CONFIG += 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 \
widget.cpp
#管理头文件
HEADERS += \
widget.h
#管理ui文件
FORMS += \
widget.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.头文件
#ifndef WIDGET_H //防止被多次包含 ifndef WIDGET_H #define WIDGET_H #endif结构
#define WIDGET_H
#include <QWidget> //Qwidget类所在的头文件(类名就是头文件), 父类的头文件,图形化界面相关的类都是从Owidget类派生的
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; } //命名空间的声明,(class Widget时ui这个命名空间中里边的)
QT_END_NAMESPACE
class Widget : public QWidget //封装widget类,公共继承与Owidget这个类
{
Q_OBJECT //信号和槽的元对象
public:
Widget(QWidget *parent = nullptr); //构造函数的声明,里边形参是一个默认参数,此时相当于是有参或无参构造函数
~Widget(); //析构函数的声明
private:
Ui::Widget *ui; //命名空间UI的类定义一个指针, 后期通过ui指针可以找到通过ui界面上拖拽出来的组件,
//内容是namespace Ui {
//class Widget: public Ui_Widget {}; //公共继承于Ui_Widget{};
//} // namespace Ui
//通过Widget::widget的有参构造函数中调用setsetupUi(this)对通过ui界面上拖拽出来的组件进行实例化空间和初始化
//自己在类内定义出来的组件用this查找
};
#endif // WIDGET_H
3.源文件 main.cpp
#include "widget.h" //自己的weidget类的头文件
#include <QApplication> //应用程序类的头文件
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //实例化一个应用程序类对象a,调用有参构造函数
Widget w; //实例化Widget对象w,调用无参构造函数
w.show(); //调用show函数,展示图形化界面,该函数是父类提供的(继承下来),可以展示本身组件和依附在此组件的所有的组件
return a.exec(); // 应用程序对象a调用exec()函数,来阻塞界面不被关闭,等待相关事件发生
//等待信号与槽, 事件处理,用户操作等
}
4.源文件:自定义类名.cpp
#include "widget.h" //自己的类的头文件,这个名字是自己起的
#include "ui_widget.h" //ui图形化界面的头文件
Widget::Widget(QWidget *parent) //widget(自己的类)的有参/无参构造函数的定义, 因为这个(组件)界面不依附其他父组件,所有在构造函数声明时默认值是nullptr
: QWidget(parent) //显性调用父类中的有参构造函数,完成子类从父类继承下来的成员的初始化工作, 父类中的默认值也是nullptr
, ui(new Ui::Widget) //对自己类中的成员实例化空间, ui::widget
{
ui->setupUi(this); //给拖拽出的组件实例化空间,this说明它们依附的父组件是widget::widget
}
Widget::~Widget() //析构函数,里边的组件ui里是没有delete p的,但是空间仍然会被释放,是因为qt中有一套自己的简易好用的内回收机制(对象模型机制)
//析构此组件时,他是将依附于自己的子组件先进行析构,然后再析构自己
{
delete ui; //成员指针的内存进行释放
}