Linux 学习记录46(QT篇)

news/2025/2/7 9:02:48/

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 += widgetsTARGET = 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);//使用应用程序实例化了一个对象aMainWindow 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);//UIDlab2->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 wordlab3->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.ppmy.cn/news/773439.html

相关文章

flutter ffmpeg_kit_flutter 踩坑

LTS区别 pubspec.yaml LTS可以兼容更低版本的安卓 ios版本, 详情:https://github.com/arthenica/ffmpeg-kit/wiki/LTS-Releases ffmpeg_kit_flutter: 5.1.0-LTS或者ffmpeg_kit_flutter: 5.1.0备注:安卓 SDK24 表示安卓7 使用非LTS版本可能提示需要修改sdk最低版本 android\app…

idea 代码格式化 Spotless 教程

介绍 Spotless 是一个代码格式化工具。它支持的开发语言有java, kotlin, scala, sql, javascript, css, json, yaml, etc。它可以提示哪里不规范&#xff0c;同时也支持自动修正&#xff08;其实就是批量的将所有类格式化&#xff09;支持maven|gradle plugin等插件 接入 下…

idea取消import自动格式化

记录一次idea取消自动格式化import列的设置。&#xff08;包括java和vue文件等&#xff09; 前因&#xff1a;上传svn时&#xff0c;总是会自动格式化import&#xff0c;例如&#xff1a;改变import顺序&#xff0c;在import前加减空格等。导致增加很多无用的修改内容&#xf…

word文件的只读模式如何退出?

Word文件以只读方式打开&#xff0c;这是因为word文件设置了限制编辑&#xff0c;不能随意修改编辑word文件&#xff0c;想要编辑到话&#xff0c;需要对word文件停止保护。 具体操作如下&#xff1a; 但是如果没有密码&#xff0c;那就不能按照上面的操作步骤来取消限制编辑…

如何做好迭代回顾 2/4

事故根因分析&#xff1a;上集 北京某软件开发公司&#xff0c;专门为电信供应商做定制软件开发&#xff0c;比如发短信做些推广活动等。公司希望做过程改进&#xff0c;我首次与公司老板访谈&#xff1a; 我&#xff1a;过程改进主要帮助管理层更好达到公司业务目标。你们自己…

生成视频的活动要求在edius里如何设置

很多活动都对最终上传的视频有一定的要求&#xff0c;比如&#xff1a;比例为16: 9&#xff0c;大小不超过1G&#xff0c; 编码格式H.264/25帧&#xff0c;分辨率1920*1080P&#xff0c;码率8Mbps&#xff0c;音频ACC编码、码率128Kbps. 我们把这些要求拆解一下&#xff0c;其…

EP-306 打印机 进入固件恢复模式 firmware recovery mode

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言问题原因和解决方法1.原因2.解决 总结 前言 EP-306 打印机和XP-55 一样&#xff0c;不过EP-306是日版100V电压。这款机型类似T50/L80X 系列&#xff0c;不过更…