Linux 学习记录46(QT篇)

news2024/10/6 16:24:56

Linux 学习记录46(QT篇)

在这里插入图片描述

本文目录

  • Linux 学习记录46(QT篇)
  • 一、建立QT项目工程
  • 二、Assistant帮助文档的使用
  • 三、自动生成的文件介绍
    • 1. tempprj.pro
    • 2. mainwindow.h
    • 3. mainwindow.cpp
    • 4. main.cpp
    • 5. mainwindow.ui
  • 四、常用类的介绍
    • 1. 信息调试类
      • (1. qDebug
      • (2. 输出当前界面尺寸
      • (3. 设置当前界面尺寸
      • (4. 设置当前窗口界面
    • 2. 按钮类(QLabel)
    • 3. 标签类(QLabel)
    • 4. 行编辑器(QLineEdit)
  • 思维导图
  • 练习
    • 1. 自定义登录页面

一、建立QT项目工程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、Assistant帮助文档的使用

在这里插入图片描述

  1. qt中的类名就是头文件的名字
  2. 有些类需要在.pro文件中引入对应的类库后,才能引入头文件,进而对类的使用
  3. qt中的类,大部分都是多级继承关系
    QLineEdit --> QWidget --> QObject and QPaintDevice
    QPushButton --> QAbstractButton --> QWidget --> QObject and QPaintDevice
    QLabel --> QFrame --> QWidget --> QObject and QPaintDevice

三、自动生成的文件介绍

在这里插入图片描述

1. tempprj.pro

.pro是一个工程管理文件,依据这个文件来生成makefile文件来编译源文件

#添加相关的类库,例如进程线程库、网络编程库、数据库等待
QT  += core gui #默认提供两个类库: core包含了核心库,io相关操作等 gui库提供了图形化相关的类库

#如果qt版本超过4.0,就会多加一个widgets类库,大部分组件全部来自于该库
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = tempprj
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as 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 you use 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

#该版本支持C++11以后的C++语法
CONFIG += c++11

#管理源文件
SOURCES += \
        main.cpp \
        mainwindow.cpp

#管理头文件
HEADERS += \
        mainwindow.h

#管理ui文件
FORMS += \
        mainwindow.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. mainwindow.h

#ifndef MAINWINDOW_H//防止文件重复包含
#define MAINWINDOW_H

#include <QMainWindow>//由于类中使用的QMainwindow,所以引入的头文件

//该命名空间是在ui文件对应的头文件中定义的,只是在此处进行声明
namespace Ui {
class MainWindow;
}

//自定义的类,界面类,该类继承了QMainwindow
class MainWindow : public QMainWindow
{
    Q_OBJECT//信号与槽的元对象

public:
    explicit MainWindow(QWidget *parent = nullptr);//构造函数的声明 指定该组件的父组件的
    ~MainWindow();//析构函数的声明

private:
	//ui界面类中的Mywnd实例化出来的对象指针,可以使用该指针,在后期找到ui界面上拖拽出来的组件
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

3. mainwindow.cpp

#include "mainwindow.h"//自定义头文件的引入
#include "ui_mainwindow.h"//ui界面对应头文件的引入

//构造函数的定义
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
//初始化列表,在类的初始化列表中必须显性调用父类的有参构造完成对继承下来成员的初始化工作

    ui(new Ui::MainWindow)//给自己的指针成员实例化空间
{
    ui->setupUi(this);//给ui界面上的组件申请空间,并初始化到ui界面上
}

//析构函数的定义
MainWindow::~MainWindow()
{
    delete ui;//释放ui指针空间
}

4. main.cpp

#include "mainwindow.h"//引用自定义头文件
#include <QApplication>//引用应用程序头文件

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);//使用应用程序实例化了一个对象a
    MainWindow w;//使用自定义的类实例化一个对象
    w.show();//将界面展示

    return a.exec();//阻塞等待对面上的操作,不然程序结束
    //可以等待:用户操作组件,信号发送,相关的事件触发
}

5. mainwindow.ui

图形化界面操作
在这里插入图片描述

四、常用类的介绍

接下来的程序编写基本上都在以下界面下
在这里插入图片描述

1. 信息调试类

需要导入 #include <QDebug> #include <QIcon>

(1. qDebug

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    qDebug("hello word\r\n");
    qDebug("%s","hello word\r\n");

}

输出>>
在这里插入图片描述

(2. 输出当前界面尺寸

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    qDebug()<<this->size();//当前界面尺寸
    qDebug()<<this->frameSize();//组件实际大小不包括边框
    qDebug()<<this->rect().size();//当前界面所占用矩形框的尺寸

}

输出>>
在这里插入图片描述

(3. 设置当前界面尺寸

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //重新设置当前界面尺寸
    this->resize(800,600);
    //使用重载函数重新设置当前界面尺寸,参数是一个匿名对象
    this->resize(QSize(400,300));

    qDebug()<<this->size();//当前界面尺寸
}

输出>>
在这里插入图片描述

(4. 设置当前窗口界面

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //设置最大尺寸
    this->setMaximumSize(400,300);
    //设置最小尺寸
    this->setMinimumSize(300,200);
    //设置固定尺寸
//    this->setFixedSize(128,64);
    //重新设置当前界面尺寸
    this->resize(800,600);
    //设置窗口类型为纯净窗口
//    this->setWindowFlag(Qt::FramelessWindowHint);
    //设置窗口标题
    this->setWindowTitle("proj");//当前界面尺寸
    //设置窗口图标
    this->setWindowIcon(QIcon("C:\\Users\\Hao\\Desktop\\buf\\link.jpg"));//设置窗口图标
    //使用样式表更改颜色
    this->setStyleSheet("background-color:grey");
    //设置串口透明度
    this->setWindowOpacity(0.5);
    //窗口位置
    this->move(30,500);
    //获取窗口标题
    qDebug()<<this->windowTitle();//当前界面尺寸
    qDebug()<<this->size();//当前界面尺寸
}

输出>>
在这里插入图片描述

2. 按钮类(QLabel)

需要添加头文件 #include <qpushbutton.h>

//1、使用按钮的构造函数,构造一个按钮
    QPushButton *btn1 = new QPushButton;         //使用的是无参构造
    //设置父组件为自己的界面
    btn1->setParent(this);            //将当前界面设置成父组件
    //设置 按钮上的文本内容
    btn1->setText("按钮1");
    //重新设置尺寸
    btn1->resize(100,40);
    //调用移动函数
    btn1->move(200,0);
    //调用函数设置图标
    btn1->setIcon(QIcon("C:\\Users\\鹏程万里\\Desktop\\icon\\peizhenshi.png"));
    //设置样式表
    btn1->setStyleSheet("background-color:red;   border-radius:5px; color:#fff");


    //2、调用按钮的构造函数,构造时顺便指定父组件
    QPushButton *btn2 = new QPushButton(this);
    btn2->setText("按钮2");
    btn2->resize(btn1->size());
    btn2->move(200, 60);
    //设置按钮的可用状态
    btn2->setEnabled(false);
    btn2->setIcon(QIcon("C:/Users/鹏程万里/Desktop/icon/denglu.png"));


    //3、调用按钮构造函数,在构造按钮的同时顺便加上文本内容以及父组件
    QPushButton *btn3 = new QPushButton("按钮3", this);
    btn3->move(0,60);


    //4、调用按钮构造函数,在构造按钮的同时,顺便给定图标、文本内容、以及父组件
    QPushButton *btn4 = new QPushButton(QIcon("C:/Users/鹏程万里/Desktop/icon/denglumima.png"), "按钮4", this);
    btn4->resize(btn1->size());
    //输出按钮上的文本内容
    qDebug()<<btn4->text();

3. 标签类(QLabel)

需要添加头文件

//1、调用构造函数构造一个标签,并指定父组件
    QLabel *lab1 = new QLabel(this);
    //给标签设置样式表
    lab1->setStyleSheet("background-color:pink;");
    //设置大小
    lab1->resize(50,30);
    //设置标签上的文本信息
    lab1->setText("账户:");
    //获取标签上的文本内容
    qDebug()<<lab1->text();
    //移动组件
    lab1->move(0,100);


    //2、调用标签的构造函数,构造时顺便给定文本内容以及父组件
    QLabel *lab2 = new QLabel("密码:", this);
    lab2->resize(lab1->size());
    lab2->move(0,140);
    //更改标签中的内容
    lab2->setPixmap(QPixmap("C:/Users/鹏程万里/Desktop/icon/yanjing.png"));
    //设置内容为自适应
    lab2->setScaledContents(true);

4. 行编辑器(QLineEdit)

//1、调用行编辑器的构造函数
    QLineEdit *edit1 = new QLineEdit(this);
    //重新设置大小
    edit1->resize(120, 30);
    //移动
    edit1->move(50, 100);
    // 设置样式表
    edit1->setStyleSheet("border:none;");
    //设置占位文本
    edit1->setPlaceholderText("QQ号/微信/邮箱");


    //2、调用行编辑器的构造函数,构造时给定初始文本
    QLineEdit *edit2 = new QLineEdit("密码", this);
    edit2->resize(edit1->size());
    edit2->move(50,140);
    //获取 文本框内容
    qDebug()<<edit2->text();      //重要
    //将文本内容设置密文模式
    edit2->setEchoMode(QLineEdit::Password);

思维导图

在这里插入图片描述

练习

1. 自定义登录页面

#include "mainwindow.h"

#include "public.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QFont UPfont;
    /************窗口设置*************/
    //设置固定尺寸
    this->setFixedSize(600,360);
    this->setWindowTitle("Qt window");//当前界面尺寸
    //设置窗口图标
    this->setWindowIcon(QIcon("C:\\Users\\Hao\\Desktop\\buf\\Qt_w.png"));//设置窗口图标
    this->setStyleSheet("background-color:#F5F5F5");

    /************标签设置*************/
    QLabel *theme1 = new QLabel(this);//主题
    theme1->resize(600,180);
    theme1->setPixmap(QPixmap("C:\\Users\\Hao\\Desktop\\buf\\Qt.jpg"));

//    QLabel *theme2 = new QLabel(this);//Pass word
//    theme2->resize(600,180);
    theme2->setPixmap(QPixmap("C:\\Users\\Hao\\Desktop\\buf\\green.png"));
//    theme2->move(0,180);
    lab4->setScaledContents(true);

    QLabel *lab2 = new QLabel(this);//UID
    lab2->resize(40,30);
    lab2->move(210,200);
    lab2->setPixmap(QPixmap("C:\\Users\\Hao\\Desktop\\buf\\IDcard.png"));
    lab2->setScaledContents(true);

    QLabel *lab3 = new QLabel(this);//Pass word
    lab3->resize(30,30);
    lab3->move(215,240);
    lab3->setPixmap(QPixmap("C:\\Users\\Hao\\Desktop\\buf\\OnePassword.png"));
    lab3->setScaledContents(true);

    /************按键设置*************/
    UPfont.setPointSize(15);
    UPfont.setFamily("宋体");
    QPushButton *log_on = new QPushButton(QIcon("C:\\Users\\Hao\\Desktop\\buf\\登录.png"),"登录", this);
    QPushButton *cancel = new QPushButton(QIcon("C:\\Users\\Hao\\Desktop\\buf\\取消.png"),"取消", this);

    log_on->resize(80,40);
    log_on->move(200,280);
    log_on->setStyleSheet("border:none;border-radius:10px;background-color:#87CEFA;color:#fff");

    cancel->resize(80,40);
    cancel->move(320,280);
    cancel->setStyleSheet("border:none;border-radius:10px;background-color:#87CEFA;color:#fff");

    /**********行编辑器设置*************/
    UPfont.setPointSize(12);
    UPfont.setFamily("宋体");

    QLineEdit *psrd = new QLineEdit(this);
    //重新设置大小
    psrd->resize(130,30);
    //移动
    psrd->move(260,240);
    // 设置样式表
    psrd->setStyleSheet("border:none;border-radius:10px;background-color:#696969;color:#fff");
    //设置占位文本
    psrd->setPlaceholderText("Pass word");
    psrd->setEchoMode(QLineEdit::Password);
    psrd->setFont(UPfont);


    QLineEdit *UID = new QLineEdit(this);
    //重新设置大小
    UID->resize(130,30);
    //移动
    UID->move(260,200);
    // 设置样式表
    UID->setStyleSheet("border:none;border-radius:10px;background-color:#696969;color:#fff");
    //设置占位文本
    UID->setPlaceholderText("UID");
    UID->setFont(UPfont);

}

MainWindow::~MainWindow()
{

}

效果>>
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stm32(DMA)

DMA介绍 什么是DMA&#xff1f; 令人头秃的描述&#xff1a; DMA(Direct Memory Access&#xff0c;直接存储器访问) 提供在外设与内存、存储器和存储器、外设 与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于 CPU&#xff0c;在这…

解决Anaconda第三方库下载慢

1.打开Anconda Prompt&#xff0c;进入后台 2.执行命令第一个是添加一个清华镜像&#xff0c;第二个设置在 conda 显示通道的 URL。 &#xff08;1&#xff09;conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ &#xff08;2&#xff0…

无线振动传感器之利:实现设备远程监控和管理

在现代工业生产中&#xff0c;设备的远程监控和管理对于提高生产效率和降低成本至关重要。而无线振动传感器作为一种先进的监测技术&#xff0c;能够快速实现设备的远程监控&#xff0c;提供实时的振动数据和设备健康状况&#xff0c;为企业的运维管理带来了许多优势。本文将介…

第十九章:Linux中安装MySQL

第十九章&#xff1a;Linux中安装MySQL 19.1&#xff1a;卸载MySQL 查看是否安装过MySQL # 如果你是用rpm安装&#xff0c;检查一下RPM PACKAGE rpm -qa | grep -i mysql # 检查 mysql service systemctl status mysqld.service # CentOS6和CentOS7在MySQL的使用中的区别 # 防…

React-Native学习,RN的容器Flex-Box布局

justify-content&#xff08;在RN中属性名称为&#xff1a;justifyContent&#xff09;在主轴上对齐方式 align-items&#xff08;在RN中属性名称为&#xff1a;alignItems&#xff09;在交叉轴上的对齐方式 在React Native中&#xff0c;当没有设置容器的主轴方向时&#xf…

Web-文件上传

需求 新增员工和修改员工的需求会需要上传对应的图像 先实现对应的新增需求吧 &#xff01;&#xff01;&#xff01;RequestBody,因为传参是json格式&#xff0c;还是看对应接口文档&#xff01;&#xff01;&#xff01; controller service mapper xml 对应代码 &…

Jstat命令解析

Jstat命令解析 Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”&#xff0c;它位于java的bin目录下&#xff0c;主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控&#xff0c;包括了对Heap size和垃圾回收…

单元测试与端到端测试——主要区别

目录 前言&#xff1a; 什么是单元测试&#xff1f; 单元测试生命周期 单元测试的好处 那么它有什么好处呢&#xff1f; 单元测试示例 单元测试的类型 单元测试工具 什么是端到端测试&#xff1f; 端到端测试 端到端测试的主要好处是什么&#xff1f; 端到端测试示…

Tauri 应用中发送 http 请求

最近基于 Tauri 和 React 开发一个用于 http/https 接口测试的工具 Get Tools&#xff0c;其中使用了 tauri 提供的 fetch API&#xff0c;在开发调试过程中遇到了一些权限和参数问题&#xff0c;在此记录下来。 权限配置 在 tauri 应用中&#xff0c;如果想要使用 http 或 fe…

小白到运维工程师自学之路 第四十九集 (正则表达式之grep)

一、概述 1、正则表达式&#xff08;Regular Expression&#xff0c;简称为RegExp或Regex&#xff09;是一种用于描述、匹配和操作文本的字符串模式的表达式。它提供了一种强大而灵活的方式来进行字符串的搜索、替换、提取和验证操作。 2、正则表达式可以用于各种编程语言和应…

SpringBoot第25讲:SpringBoot对TypeHandler的使用

SpringBoot第25讲&#xff1a;SpringBoot对TypeHandler的使用 本文是SpringBoot第25讲&#xff0c;SpringBoot对TypeHandler的使用&#xff0c;TypeHandler就是当SpringBoot 实体类中字段类型和数据库中字段类型不一致时进行使用。 文章目录 SpringBoot第25讲&#xff1a;Sprin…

基环树学习笔记

0.前言 只因环树学习笔只因。 如有错误欢迎指出。 1.基本概念 这名字读起来感觉有点矛盾&#xff0c;怎么可能树上面有一个环呢&#xff1f; 我们把它放到百度翻译里面看看。 顾名思义&#xff0c;基环树不是一棵树&#xff0c;而是一颗假树&#xff0c;他的定义是&#…

Acwing.861 二分图的最大匹配(匈牙利算法)

题目 给定一个二分图&#xff0c;其中左半部包含nq个点(编号1n1)&#xff0c;右半部包含ng个点(编号1n2)&#xff0c;二分图共包含m条边。 数据保证任意—条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。 给定一个二分图G&#xff0c;在G的一个子图M中&…

软件测试基础认知

日升时奋斗&#xff0c;日落时自省 目录 1、测试需求 2、测试用例 3、软件测试BUG 4、开发模型 4.1、软件的生命周期 4.2、瀑布模型&#xff08;waterFall Model&#xff09; 4.3、螺旋模型 4.4、 增量模型 4.4.1、增量开发 4.4.2、迭代开发 4.5、敏捷开发&#xf…

【PDFBox】PDFBox操作PDF文档之创建PDF文档、加载PDF文档、添加空白页面、删除页面、获取总页数、添加文本内容、PDFBox坐标系

这篇文章&#xff0c;主要介绍PDFBox操作PDF文档之创建PDF文档、加载PDF文档、添加空白页面、删除页面、获取总页数、添加文本内容、PDFBox坐标系。 目录 一、PDFBox组件 1.1、什么是PDFBox 1.2、创建PDF文档 1.3、加载PDF文档 1.4、添加空白页面 1.5、删除某个页面 1.6…

三分钟了解 SpringBoot 的启动流程

一、前言 背景&#xff1a;最近有位开发同学说面试被问到Spring Boot 的启动流程&#xff0c;以及被问到Spring Boot 的嵌入式Web容器是什么时候加载的。如何加载的。是怎么无缝切换的。 这些问题&#xff0c;其实回答起来也是比较复杂的。我们今天就从 SpringApplication.ru…

3D设计建模软件The Foundry Modo 16对Mac和Windows的系统要求

Foundry MODO是一款功能强大的三维建模、动画和渲染软件。它为艺术家和设计师提供了一套全面的工具&#xff0c;可以用来创建令人惊叹的视觉效果。无论是制作电影、电视节目、游戏还是其他数字媒体内容&#xff0c;MODO都可以满足您的需求。 MODO具有直观的用户界面&#xff0…

redis主从配置

从redis配置&#xff1a;redis6386.conf include /data/redis/redis6380.conf #主redis配置文件路径&#xff08;这里是引用主配置文件里的配置在修改从配置&#xff09; daemonize yes #在后台启动 protected-mode no #加密保护关闭 bind 192.168.3.*** requirepas…

云主机安全-私有密钥安全认证

场景描述 云主机凭借其性价比高、生配扩容便利、运维便捷、稳定性高等优势深受用户青睐&#xff0c;越来越多的企业开始租用云主机&#xff0c;将自己的服务器、业务系统等搭建或存储到云主机上。 用户痛点 用户租用或托管的云主机&#xff0c;运维端口&#xff08;远程桌面&…

SSM框架最新整合保姆级教程(IDEA版)

SSM框架最新整合保姆级教程(IDEA版) 一、环境要求 ​ 环境&#xff1a; IDEAMySQL 5.7.19Tomcat 9Maven 3.6 要求&#xff1a; 需要熟练掌握MySQL数据库&#xff0c;Spring&#xff0c;JavaWeb及MyBatis知识&#xff0c;简单的前端知识&#xff1b; 完整代码&#xff1a;…