当前位置: 首页 > news >正文

c++qt-基本组件

1. Designer 设计师(掌握)

Qt包含了一个Designer程序,用于通过可视化界面设计开发界面,保存的文件格式为.ui(界面文件)。界面文件内部使用xml语法的标签式语言。

在Qt Creator中创建项目时,选中界面文件选项,可以让自带的窗口类使用界面文件。

可以看到在项目中会增加一个界面文件,双击此文件,可以直接使用内置的Designer程序打开并设计。

所有Designer中的操作都可以通过C++代码实现。

2. 布局 Layout(掌握)

可以把布局看做是一个透明的盒子,内部可以放置子组件,这些内部的子组件会按照布局预设的规则自动排序。

垂直布局:内部组件竖着排成一排。

水平布局:内部组件横着排成一排。

格栅布局:内部组件排布成n*m的表格。

表单布局:用户搭建用户输入的布局效果。

垂直布局与水平布局的使用方式类似,只是方向不同,常用属性如下:

选中布局后,点击可以打破布局。

布局可以贴合窗口,只需要选中窗口对象后,再次点击按钮之一即可。

使用伸展器组件可以填充空白。

布局可以嵌套,对于外层布局而言,内层布局相当于一个外层布局的子组件。

3、 QWidget类

Qwidget的属性在Designer中显式的为淡黄色,下面是一些常用的属性:

策略:除非必要情况下,实现特殊功能,否则尽量不修改策略。因为当前策略针对当前组件是最友好的。

4、界面文件与C++代码的关系

5、QLabel标签

5.1 基本属性

QLabel用于显式文字或者图片,需要注意的是,QLabel不能与用户交互(不能点击),只能展示使用,因此没有合适的信号函数。

我们可以直接对标间进行命名,系统默认的命名方式就是:“标签名称_序号”。

5.2 添加资源库

把图片导入到项目中,成为项目资源,直接使用Qt的虚拟的资源路径导入图片,可以在任何环境中使用这些资源图片。

Qt支持以下几种常用的图片格式:

jpg(不包含透明度)、png(包含透明度)、gif(动图)等。

注意导入的图片的大小,不能特别大(分辨率过高或文件过大),因为操作图片非常消耗程序资源。

下面是导入图片成为项目资源的操作步骤:

  1. 把命名好的图片放置到项目的工作目录中。
  2. 在Qt Creator中选中项目名称,鼠标右键,点击“添加新文件”。
  3. 在弹出的窗口中,按照下图所示进行操作。

  1. 在弹出的窗口中给资源文件命名,例如res。

  1. 在项目管理界面,直接点击“完成”。可以看到在项目中多了一个.qrc格式的资源文件。

  1. 选中qrc文件点击,可以给资源文件新建一个虚拟路径。,选择需要导入的图片。
  2. 导入成功后,可以在qrc文件中看到导入成功的图片。

5.3 使用资源库

  1. 点击重新构建项目,就可以使用了。

  1. 新添加的图片显示不全,需要把缩放模式点上。

5.4 通过代码添加图片 QPixmap()

先在UI中添加一个label框,在代码中对该label框进行操作。

  1. 我们也可以通过代码,加载图片,以及修剪图片尺寸等。

2、需要加头文件#include<QPixmap>。图片类头文件

// 图片类构造函数,栈内存对象
// 参数1:图片资源路径(qrc中的图片路径)
// 参数2:样板格式,默认值就行
// 参数3:图片颜色格式,默认就行
QPixmap:: QPixmap(const QString & fileName, const char * format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor)

  1. 当前已经创建了图片类的对象,但是还需要进行缩放,执行输出模式。

// 缩放
// 参数1:QSize类型对象,表示目标尺寸。需要添加头文件#include<QSize>
// 参数2:三种缩放模式,是一个枚举类型
// 参数3:以速度优先还是以质量优先,两种模式。默认是以速度优先。是一个枚举
QPixmap QPixmap:: scaled(const QSize & size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const

// QSize构造函数
// 图片的宽度和高度
QSize:: QSize(int width, int height)

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QPixmap> // 图片类
#include <QSize>namespace Ui {
class Dialog;
}class Dialog : public QDialog
{
    Q_OBJECTpublic:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();private:
    Ui::Dialog *ui;
};#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{
    ui->setupUi(this);// 创建一个图片类对象QPixmap pic(":/new/prefix1/g.jpg");// 定义QSize对象QSize size(ui->labelTest->width(),ui->labelTest->height());// 缩放
    pic = pic.scaled(size,Qt::KeepAspectRatio,Qt::SmoothTransformation);// 使用界面文件的组件对象
    ui->labelTest->setPixmap(pic);}Dialog::~Dialog()
{
    delete ui;
}

5.5 使用代码添加动态图QMovie()

添加动态图:

1、需要将动态图,放到项目文件中,.gif

  1. 添加完成后,需要将动态,加载到资源目录中。

电影类,如果要播放动图,需要用到电影类,添加头文件#include<QMovie>.

// 创建电影类对象,需要用这个构造函数
// 参数1:资源路径
// 参数2:输出模式,默认
// 参数3:基类指针。创建堆区对象
QMovie:: QMovie(const QString & fileName, const QByteArray & format = QByteArray(), QObject * parent = 0)

.h电影类头文件

#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QPixmap> // 图片类
#include <QSize>
#include <QMovie>//电影类
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
    Q_OBJECT
public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
private:
    Ui::Dialog *ui;
    QMovie *movie;
};
#endif // DIALOG_H

.c

#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{
    ui->setupUi(this); 
    //创建图片对象
    QPixmap pic(":/new/prefix1/dog.png");
    //定义QSize对象
    QSize size(ui->label->width(),ui->label->height());
    // 缩放    
    pic = pic.scaled(size,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    // 使用界面文件的组件对象
    ui->label->setPixmap(pic);
    //创建电影类对象
    movie = new QMovie(":/new/prefix1/gg.gif");
    //给QLabel设置电影类
    ui->label_2->setMovie(movie);
    //播放电影
    movie->start();
}
Dialog::~Dialog()
{
    delete ui;
}

6. QAbstractButton 按钮类(掌握)

QAbstractButton是按钮类的抽象基类,因此内部包含了按钮的基础属性和函数。

常用属性:

1)GroupBox 分组盒子组件:

QAbstractButton按钮类的基础属性:

给按钮添加一个图标:

iconfont-阿里巴巴矢量图标库

2)按钮类常用信号如下:

注意,这个通知信号函数和别的有些区别,状态发生改变时,发射此信号:

3)QButtonGroup 组件

可以使用QButtonGroup组件对多个按钮进行分组,是一个按钮的逻辑分组。没有任何的UI效果,其中主要的目的是用一个信号槽同时监控多个按钮对象的状态。

参数中:表示当前触发的按钮对象本身。

表示当前触发的按钮序号。

// 给管理组件,添加控件
// 参数1:添加的控件
// 参数2:序号ID
void QButtonGroup:: addButton(QAbstractButton * button, int id = -1)

//解除按钮的互斥性 
void	setExclusive(bool)

7. QLineEdit 单行文本输入框(掌握)

1)QLineEdit用于输入一个单行文本,常用属性如下:

2)常用信号函数如下:

8. ComboBox 组合框(掌握)

ComboBox用于选择一个选项,功能类似于QRadioButton。

1)常用属性如下:

2)常用信号如下:

9. 若干与数字相关的组件(掌握)

以下组件都是与数字相关。

1)这些组件的一些共同的属性和函数:

// value属性值发生变化时发射的信号
// 参数为当前的value值
void	valueChanged(int value) [signal]

dialog.h

#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
    Q_OBJECT
public:explicit Dialog(QWidget *parent = 0);~Dialog();
private:
    Ui::Dialog *ui;
private slots:void setValueSlot(int);
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{
    ui->setupUi(this);
    //多对一,多个函数对应一个槽函数,通过一个控制多个组件connect(ui->dial,SIGNAL(valueChanged(int)),this,SLOT(setValueSlot(int)));connect(ui->horizontalScrollBar,SIGNAL(valueChanged(int)),this,SLOT(setValueSlot(int)));connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(setValueSlot(int)));connect(ui->progressBar,SIGNAL(valueChanged(int)),this,SLOT(setValueSlot(int)));connect(ui->verticalScrollBar,SIGNAL(valueChanged(int)),this,SLOT(setValueSlot(int)));connect(ui->verticalSlider,SIGNAL(valueChanged(int)),this,SLOT(setValueSlot(int)));connect(ui->spinBox,SIGNAL(valueChanged(int)),this,SLOT(setValueSlot(int)));
}
Dialog::~Dialog()
{delete ui;
}
void Dialog::setValueSlot(int value)
{
    ui->dial->setValue(value);
    ui->horizontalScrollBar->setValue(value);
    ui->horizontalSlider->setValue(value);
    ui->progressBar->setValue(value);
    ui->verticalScrollBar->setValue(value);
    ui->verticalSlider->setValue(value);
    ui->spinBox->setValue(value);
}

相关文章:

c++qt-基本组件

1. Designer 设计师&#xff08;掌握&#xff09; Qt包含了一个Designer程序&#xff0c;用于通过可视化界面设计开发界面&#xff0c;保存的文件格式为.ui&#xff08;界面文件&#xff09;。界面文件内部使用xml语法的标签式语言。 在Qt Creator中创建项目时&#xff0c;选中…...

SpringBoot多环境配置Maven Profile组

Maven profile组 注意切换配置时 mvn clean下 或者 clean 加install 或者compile 编译 clean之后 install下 或者compile 编译 nohup java -Xms256m -Xmx512m -Dfile.encodingUTF-8 -jar demo.jar --spring.profiles.activeprod > system.log 2>&1 &...

服务器配置 ssh 密钥登录

服务器配置 ssh 密钥登录 配置 服务器安全组策略&#xff0c;开放 ssh 22 端口&#xff0c;以 root 用户登录服务器。 配置 ssh key 登录 ssh-keygen 生成公钥和私钥对 如果不需要其他设置&#xff0c;一直回车 可以在 ~/.ssh 目录下看到两个文件&#xff0c;即刚生成的私钥…...

使用递归将list转换成tree

在产品研发时遇到这样一个问题&#xff0c;对于省市区县这类三级联动的数据&#xff0c;前端插件需要一次把数据全部返回&#xff0c;单纯的使用接口查询字节的没办法满足要求。 如果一次把数据全部返回&#xff0c;前端使用起来很麻烦需要一条一条的进行查找。 常规的使用方…...

untiy使用http下载资源

文章目录 提醒下载一个资源并保存到本地下载一张图片 提醒 部分API需要将Unity的 Edit/PrejectSetting/Player/OtherSetttings/AConfiguration/ApiCompatibilityLevel 设为.NetFramework 才可以使用 下载一个资源并保存到本地 private IEnumerator DownloadFormServer_IE(st…...

03-编码篇-x264编译与介绍

使用FFMPEG作编码操作时&#xff0c;会涉及到将yuv数据编码成h264数据&#xff0c;FFmpeg的libavcodec中的libx264.c会调用x264库的源码作编码&#xff1a; 1.x264库编译 下载X264&#xff0c;地址为&#xff1a;http://www.videolan.org/developers/x264.html&#xff0c;并解…...

生活自来水厂污水处理设备需要哪些

生活自来水厂是确保我们日常用水质量安全的重要设施。在自来水的生产过程中&#xff0c;污水处理设备是不可或缺的环节。那么&#xff0c;生活自来水厂的污水处理设备都有哪些呢&#xff1f;本文将为您详细介绍。 首先&#xff0c;生活自来水厂的污水处理设备主要包括预处理设备…...

Full names for abbreviations of Linux Commands

synopsis Towards/On Full names for abbreviations of Linux Commands I) website addressII) Mapping between full names and abbreviations I) website address II) Mapping between full names and abbreviations su&#xff1a;Swith user 切换用户&#xff0c;切换到ro…...

kafka下载安装部署

Apache kafka 是一个分布式的基于push-subscribe的消息系统&#xff0c;它具备快速、可扩展、可持久化的特点。它现在是Apache旗下的一个开源系统&#xff0c;作为hadoop生态系统的一部分&#xff0c;被各种商业公司广泛应用。它的最大的特性就是可以实时的处理大量数据以满足各…...

python包管理工具:pipenv的基本使用

很多语言都提供了环境隔离的支持&#xff0c;例如nodejs的node_module&#xff0c;golang的go mod&#xff0c;python也有virtualenv和pyvenv等机制。 为了建立依赖快照&#xff0c;通常会用pip freeze > requirements.txt 命令生成一个requirements.txt文件&#xff0c;在…...

AI系统ChatGPT网站系统源码AI绘画详细搭建部署教程,支持GPT语音对话+DALL-E3文生图+GPT-4多模态模型识图理解

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…...

MC-4/11/03/400步进电机驱动器的主要驱动方式有哪些?

MC-4/11/03/400步进电机驱动器的主要驱动方式有哪些&#xff1f; 步进电机驱动器是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号&#xff0c;它就驱动步进电机按设定的方向转动一个固定的角度&#xff0c;这个固定的角度被称为“步距角”。步进电机不能…...

大数据技术原理与应用期末复习(林子雨)

大数据技术原理与应用期末复习&#xff08;林子雨&#xff09; Hadoop的特性HBase编程实践NoSQL的四大类型键值数据库优点&#xff1a;缺点&#xff1a; 列族数据库优点&#xff1a;缺点&#xff1a; 文档数据库优点&#xff1a;缺点&#xff1a; 图数据库优点&#xff1a;缺点…...

C练习——魔术师猜三位数

题目&#xff1a; 有一种室内互动游戏&#xff0c;魔术师要每位观众心里想一个三位数abc&#xff08;a、b、c分别是百位、十位和个位数字&#xff09;&#xff0c;然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及这5个数的和值。只要观众说出这个和是多少&#xf…...

three.js 使用 tweenjs绘制相机运动动画

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…...

Oracle VARCHAR和VARCHAR2区别

在Oracle数据库中&#xff0c;VARCHAR和VARCHAR2是两种不同的数据类型&#xff0c;它们的区别如下&#xff1a; 1.存储空间 VARCHAR和VARCHAR2在存储空间上有所不同。在Oracle 7及以下版本中&#xff0c;VARCHAR类型的长度是固定的&#xff0c;如果存储的数据长度小于定义的长…...

HarmonyOS 开发基础(八)Row和Column

HarmonyOS 开发基础&#xff08;八&#xff09;Row和Column 一、Column 容器 1、容器说明&#xff1a; 纵向容器主轴方向&#xff1a;从上到下纵向交叉轴方向&#xff1a;从左到右横向 2、容器属性&#xff1a; justifyContent&#xff1a;设置子元素在主轴方向的对齐格式…...

Visual Studio中项目添加链接文件

这个需求在VS里面使用还真不多见&#xff0c;只是最近在做项目的版本编号的时候遇到一个头大的问题&#xff0c;我一个解决方案下面有几十个类库&#xff0c;再发布的时候这几十个类库的版本号必须要统一&#xff0c;之前我们都是在单个的AssemblyInfo.cs里面去改相关的信息&am…...

做一个个人博客第一步该怎么做?

做一个个人博客第一步该怎么做&#xff1f; 好多零基础的同学们不知道怎么迈出第一步。 那么&#xff0c;就找一个现成的模板学一学呗&#xff0c;毕竟我们是高贵的Ctrl c v 工程师。 但是这样也有个问题&#xff0c;那就是&#xff0c;那些模板都&#xff0c;太&#xff01;…...

vue前端开发自学练习,Props数据传递-类型校验,默认值的设置!

vue前端开发自学练习,Props数据传递-类型校验,默认值的设置&#xff01; 实际上&#xff0c;vue开发框架的时候&#xff0c;充分考虑到了前端开发人员可能会遇到的各种各样的情况&#xff0c;比如大家经常遇到的&#xff0c;数据类型的校验&#xff0c;再比如&#xff0c;默认…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...