• 嵌入式养成计划-42----QT 创建项目--窗口界面--常用类及组件


    一百零五、如何创建 QT 项目

    1. 创建工程 +New Project / 文件–>新建。。 /ctrl +N
      在这里插入图片描述

    2. 选择一个模板–>Application -->Qt Widgets Application
      在这里插入图片描述

    3. 选择创建的路径,以及设置文件名
      在这里插入图片描述

    4. 下一步
      在这里插入图片描述

    5. 输入类名,选择基类为 QWidget
      在这里插入图片描述

    6. 下一步
      在这里插入图片描述

    7. 选择这个玩意,然后下一步(如果没有这个选项,那就是安装的时候没装好,建议卸载重装)
      在这里插入图片描述

    8. 完成创建
      在这里插入图片描述

    一百零六、一个项目中的文件介绍

    106.1 main.cpp 主函数

    #include "mywidget.h" //我的窗口的头文件
    #include   //包含应用程序类的头文件
    
    //主函数    argc命令行变量的个数   agrv命令行变量列表
    int main(int argc, char *argv[])
    {
        //应用程序类实例化一个a对象  a对象有且仅有一个
        QApplication a(argc, argv);
        //我的窗口的对象
        MyWidget w;
        //窗口默认不显示,需要调用show显示
        w.show();
        //让应用程序类的对象 进入消息循环,==阻塞
        return a.exec();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    106.2 xxx.h 接口头文件

    //防止头文件重复包含
    #ifndef MYWIDGET_H
    #define MYWIDGET_H
    
    #include 
    
    class MyWidget : public QWidget //封装自己窗口的类 共有继承于QWidget
    {
        Q_OBJECT  //宏  用于信号和槽
    
    public:
        MyWidget(QWidget *parent = nullptr); //构造函数
        ~MyWidget(); //析构函数
    };
    #endif // MYWIDGET_H
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    106.3 xxx.cpp 接口的实现

    #include "mywidget.h" //包含头文件
    
    //构造函数实现
    MyWidget::MyWidget(QWidget *parent)
        : QWidget(parent) //用初始化列表 给父类成员初始化
    {
    }
    //析构函数实现
    MyWidget::~MyWidget()
    {
    }
    //其他接口函数实现
    ······
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    106.4 Qt中信息调试类(输出类) QDebug的使用

    • 可在构造函数中写这些
    MyWidget::MyWidget(QWidget *parent)
        : QWidget(parent) //用初始化列表 给父类成员初始化
    {
        //1.类似printf
        qDebug("%s", "hello world");
    
        //2.类似cout 默认换行
        qDebug() << "hello kitty" ;
    
        //3.qt的字符串类型用QString类,其中有个成员函数arg比较厉害
        //QString s = QString("%1, %2, %3").arg(100).arg(200).arg(300);
        qDebug() << QString("%1, %2, %3").arg(100).arg(200).arg(300);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    一百零七、对窗口界面的相关设置

    107.1 求出当前窗口的尺寸

    qDebug() << this->size();				//窗口的宽和高
    qDebug() << this->geometry().size();	//通过几何图像 输出宽和高
    qDebug() << this->size().width();		//..宽
    qDebug() << this->size().height();		//..高
    qDebug() << this->width();
    qDebug() << this->height();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    107.2 窗口的尺寸、标题、背景色等设置

    //重新设置窗口的大小
    this->resize(530, 410);
    
    //设置窗口标题
    this->setWindowTitle("我的窗口");
    
    //设置窗口图标
    this->setWindowIcon(QIcon("C:\\Users\\admin\\Desktop\\pictrue\\qq.png"));
    
    //设置纯净窗口,去掉头部
    this->setWindowFlag(Qt::FramelessWindowHint);
    
    //设置窗口背景颜色
    this->setStyleSheet("background-color:white");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    一百零八、常用类及组件的使用

    108.1 按钮类 QPushButton

    • 按钮
    #include "mywidget.h"
    MyWidget::MyWidget(QWidget *parent)
        : QWidget(parent)
    {
        //创建第一个按钮, 使用无参构造
        QPushButton *btn1 = new QPushButton;
        btn1->setText("第一个按钮"); //设置按钮文本
        //btn1->show();
        btn1->setParent(this); //指定父对象(父组件),可以依赖父对象显示,可以不用管它的释放操作
        btn1->setStyleSheet("background-color:pink");
        btn1->setIcon(QIcon("C:\\Users\\admin\\Desktop\\pictrue\\qq.png"));
        btn1->setEnabled(false); //设置不可用状态
    
        //创建第二个按钮
        QPushButton *btn2 = new QPushButton(this); //创建对象时,指向父对象
        btn2->setText("第二个按钮");
        btn2->move(200,0);
    
        //创建第三个按钮
        QPushButton *btn3 = new QPushButton("第三个按钮",this);
        btn3->move(300,200);
    
        //创建第四个按钮
        QPushButton *btn4 = new QPushButton(QIcon("C:\\Users\\admin\\Desktop\\pictrue\\qq.png"),"第四个按钮",this);
        btn4->move(300,300);
    }
    MyWidget::~MyWidget()
    {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    108.2 行编辑器类(QLineEdit)

    • 输入框
    MyWidget::MyWidget(QWidget *parent)
        : QWidget(parent)
    {
        //创建第一个行编辑器
        QLineEdit *ed1 = new QLineEdit; //无参构造
        ed1->setParent(this);
        ed1->move(300,0);
        ed1->setEchoMode(QLineEdit::Password); //设置密码
    
        //创建第二行编辑器
        QLineEdit *ed2 = new QLineEdit("张三",this); //默认文本
        ed2->setEnabled(false);
        
        //创建第三个行编辑器
        QLineEdit *ed3 = new QLineEdit(this);
        ed3->move(200,100);
        ed3->setPlaceholderText("姓名"); //设置占位
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    108.3 标签类(Qlabel)

    • 一般显示文本或者图片用的
    MyWidget::MyWidget(QWidget *parent)
        : QWidget(parent)
    {
        this->resize(600,400);
        //创建一个label
        QLabel *lab1 = new QLabel;
        lab1->setParent(this);
        lab1->setText("我是一个标签");
        lab1->resize(200,100);
        lab1->setStyleSheet("background-color:red");//背景颜色
    
        //创建二个label
        QLabel *lab2 = new QLabel(this);
        lab2->move(200,200);
        lab2->resize(100,100);//重新设置大小
        //设置图片
        lab2->setPixmap(QPixmap("C:\\Users\\admin\\Desktop\\pictrue\\logo.png"));
        //让图片自动使用标签
        lab2->setScaledContents(true);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    小作业

    • 模拟一个 QQ 的登录界面

    我写的

    在这里插入图片描述

    代码 :

    main.cpp

    • 没动,生成啥样就还是啥样
    #include "qq_login.h"
    #include 
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        qq_login w;
        w.show();
        return a.exec();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    qq_login.h

    #ifndef QQ_LOGIN_H
    #define QQ_LOGIN_H
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include
    
    class qq_login : public QWidget
    {
        Q_OBJECT
    
    public:
        qq_login(QWidget *parent = nullptr);
        ~qq_login();
    };
    
    #endif // QQ_LOGIN_H
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    qq_login.cpp

    #include "qq_login.h"
    
    qq_login::qq_login(QWidget *parent)
        : QWidget(parent)
    {
        this->resize(536,410);
        //取消窗口头部
        this->setWindowFlag(Qt::FramelessWindowHint);
        //设置窗口背景颜色
        this->setStyleSheet("background-color:white");
        //设置窗口标题
        this->setWindowTitle("QQ");
    
        //窗口上半部分的图
        QLabel *lab1 = new QLabel(this);
        //选择图形
        lab1->setPixmap(QPixmap("C:\\Users\\zhk\\Desktop\\qq_login.gif"));
        //设置图形尺寸
        lab1->resize(536,156);
    
        //左上角的企鹅
        QLabel *lab2 = new QLabel(this);
        //选择图片
        lab2->setPixmap(QPixmap("C:\\Users\\zhk\\Desktop\\qie.png"));
        //设置尺寸
        lab2->resize(36,39);
        //基于左上角移动位置
        lab2->move(10,15);
        //设置自动适应标签
        lab2->setScaledContents(true);
        //设置背景颜色
        lab2->setStyleSheet("background-color:rgb(49,164,241)");
        //设置窗口透明度
        lab2->setWindowOpacity(0.3);
    
        //左上角企鹅右边的QQ
        QLabel *lab3 = new QLabel("QQ",lab1);
        //基于左上角移动位置
        lab3->move(47,15);
        //设置尺寸
        lab3->resize(45,39);
        //设置自动适应标签
        lab3->setScaledContents(true);
        //设置背景颜色
        lab3->setStyleSheet("background-color:rgb(49,164,241)");
        //调整QQ俩字母的字体
        QFont ft;
        //调成16号大小
        ft.setPointSize(16);
        //绑给lab3
        lab3->setFont(ft);
    
        //QQ号输入框前面的图标
        QLabel *lab4 = new QLabel(this);
        //找图片
        lab4->setPixmap(QPixmap("C:\\Users\\zhk\\Desktop\\pictrue\\wodepeizhenshi.png"));
        //设置尺寸
        lab4->resize(25,25);
        //基于左上角移动位置
        lab4->move(123,216);
        //设置自动适应标签
        lab4->setScaledContents(true);
    
        //密码前面的图标
        QLabel *lab5 = new QLabel(this);
        //找图片
        lab5->setPixmap(QPixmap("C:\\Users\\zhk\\Desktop\\pictrue\\passwd.jpg"));
        //设置尺寸
        lab5->resize(25,25);
        //基于左上角移动位置
        lab5->move(123,250);
        //设置自动适应标签
        lab5->setScaledContents(true);
    
        //QQ号行编辑器
        QLineEdit *qq_num = new QLineEdit(this);
        //设置尺寸
        qq_num->resize(270,30);
        //基于左上角移动位置
        qq_num->move(150,215);
    
        //密码行编辑器
        QLineEdit *passwd = new QLineEdit(this);
        //设置尺寸
        passwd->resize(270,30);
        //基于左上角移动位置
        passwd->move(150,245);
        //设置输入模式为密码输入模式
        passwd->setEchoMode(QLineEdit::Password);
    
        //自动登录
        QLabel *lab6 = new QLabel("自动登录",this);
        //设置尺寸
        lab6->resize(65,20);
        //基于左上角移动位置
        lab6->move(145,307);
    
        //自动登录前面的选择框
        QCheckBox*box1 = new QCheckBox("Checkbox1", this);
        //设为默认选中
        box1->setChecked(true);
        //基于左上角移动位置
        box1->move(125, 307);
        //设置尺寸
        box1->resize(21, 20);
    
        //记住密码
        QLabel *lab7 = new QLabel("记住密码",this);
        //设置尺寸
        lab7->resize(65,20);
        //基于左上角移动位置
        lab7->move(260,307);
    
        //记住密码前面的选择框
        QCheckBox *box2 = new QCheckBox("Checkbox2", this);
        //设为默认选中
        box2->setChecked(true);
        //基于左上角移动位置
        box2->move(242, 307);
        //设置尺寸
        box2->resize(21, 20);
    
        //找回密码
        QLabel *lab8 = new QLabel("找回密码",this);
        //设置尺寸
        lab8->resize(65,20);
        //基于左上角移动位置
        lab8->move(356,307);
    
        //注册账号
        QLabel *lab9 = new QLabel("注册账号",this);
        //设置尺寸
        lab9->resize(65,20);
        //基于左上角移动位置
        lab9->move(14,381);
    
        //登录按键
        QPushButton *btn = new QPushButton("登录",this);
        //设置尺寸
        btn->resize(297,44);
        //基于左上角移动位置
        btn->move(124,342);
        //设置按钮的背景色和柔化程度
        btn->setStyleSheet("background-color:rgb(7,188,252);border-radius:3");
    
        //右下角的二维码
        QLabel *lab10 = new QLabel(this);
        //找图片
        lab10->setPixmap(QPixmap("C:\\Users\\zhk\\Desktop\\eweima.png"));
        //设置尺寸
        lab10->resize(30,30);
        //基于左上角移动位置
        lab10->move(492,367);
        //设置自动适应标签
        lab10->setScaledContents(true);
    
        //中间的头像
        QLabel *lab11 = new QLabel(this);
        //设置尺寸
        lab11->resize(85,85);
        //找图片
        lab11->setPixmap(QPixmap("C:\\Users\\zhk\\AppData\\Roaming\\Tencent\\QQ\\Misc\\GenIcons\\b592921469.ico"));
        //基于左上角移动位置
        lab11->move(230,110);
        //设置自动适应标签
        lab11->setScaledContents(true);
        //柔化到极致,就成了圆了
        lab11->setStyleSheet("border-radius:42px");
    }
    
    qq_login::~qq_login()
    {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
  • 相关阅读:
    C++中返回类型与return语句
    骑砍2霸主MOD开发(6)-使用C#-Harmony修改本体游戏逻辑
    OKHTTP:Cookie在okhttp中的原理
    BC35&BC95 ONENET MQTT(旧)
    关于HTML5表单验证的方法教程
    配置与管理Samba服务器实例
    [贪心][预处理+二分][好题]Find the Number 2022ICPC第一场网络选拔赛D
    Python每日一练 05
    全/半连接队列(Linux环境下listen函数的第二个参数的意义)
    网络编程_sgu(620-635)
  • 原文地址:https://blog.csdn.net/qq_52625576/article/details/133870768