QT基本组件

四、基本组件

  1. Designer 设计师(重点)

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

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

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

2、布局Layout(掌握)

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

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

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

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

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

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

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

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

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

3、QWidget类(掌握)

QWidget的属性在Designer中显示为淡黄色,

策略:除非必要情况,或实现特殊功能,否则我们的策略进行不要进行修改,因为当前策略对当前控件是最友好的。

4、界面文件与C++代码的关系(熟悉)

5、QLabel标签(掌握)

5.1 基本属性

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

QLabel常用属性如下:

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

5.2 添加资源库

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

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

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

注意导入的图片不能过大(分辨率过高或文件体积过大),因为图片的操作非常消耗资源,图片过大会过度浪费资源。

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

  1. 在QtCreator中选中项目名称,鼠标右键,点击“添加新文件”。
  2. 在弹出的窗口中,按照下图进行操作

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

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

  1. 把命名好的(不包含中文字符)的图片文件放置到项目的工作目录中。

6、选中qrc文件,点击,可以给资源文件新建一个虚拟路径。

7、选中qrc文件,点击,可以导入图片到项目中成为资源。

  1. 导入完成后,可以在qrc文件中看到导入成功的图片。

5.3 使用资源库

1、点击重新构建项目。然后就可以在Designer找到图片资源并使用了。

2、添加图片后,图片比较大,可能会显示不全,需要把scaledContents缩放模式点上。

3、为了测试方便,我们图片最小宽高设置为400、最大宽高也设置成400、此时我们发现,图片变形。

5.4 使用代码添加图片

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

  1. 如果我们通过代码,加载操作图片,我们需要使用#include<QPixmap>头文件,图片类头文件。
  2. 创建一个图片类对象。

// 图片类构造函数
// 参数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 QPixmap::​scaled(const QSize & size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const

QSize类

// QSize构造函数
// 宽度以及高度
QSize::​QSize(int width, int height)

需要注意的是,尽量在项目开发之前使用ps等软件预先处理好图片,减少代码运行时的开销,提高代码的运行效率。减少资源占用。

#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");    // 定义size对象
    QSize size(ui->label->width(),ui->label->height());    // 缩放
    pic = pic.scaled(size,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    // 使用界面文件中的组件对象
    ui->label->setPixmap(pic);
}Dialog::~Dialog()
{
    delete ui;
}

5.5 使用代码添加动态图

添加动态图:

  1. 需要将我们的动态图,放到项目文件中,并改为.gif
  2. 添加完成后,需要将动态图,加载到项目资源中。

电影类

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

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

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QPixmap> // 图片类
#include <QSize>
#include <QMovie> // 电影类头文件namespace Ui {
class Dialog;
}class Dialog : public QDialog
{
    Q_OBJECTpublic:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();private:
    Ui::Dialog *ui;
private:
    QMovie *movie;  // 电影类指针
};#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");    // 定义size对象
    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/test.gif");
    // 给QLabel设置电影
    ui->label_2->setMovie(movie);
    // 播放电影
    movie->start();}Dialog::~Dialog()
{
    delete ui;
}

6、QAbstractButton按钮类(掌握)

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

GroupBox分组盒子组件

QAbstractButton按钮类的常用基本属性

给按钮添加一个图标:

图标文件可以通过下面的网站下载:

iconfont-阿里巴巴矢量图标库

按钮类常用的信号如下:

注意:这个通知信号和别的信号存在区别,只有在状态发生变化时发射。

携带的参数为当前状态。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QDebug>namespace Ui {
class Dialog;
}class Dialog : public QDialog
{
    Q_OBJECTpublic:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();private:
    Ui::Dialog *ui;private slots:
    void toggledSlot(bool);
};#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->radioButton_8,SIGNAL(toggled(bool)),
            this,SLOT(toggledSlot(bool)));
}Dialog::~Dialog()
{
    delete ui;
}void Dialog::toggledSlot(bool checked)
{
    if(checked)
    {
        qDebug() << "肯德基被选中了" ;
    }
    else
    {
        qDebug() << "不选肯德基" ;
    }
}

QButtonGroup组件

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

QButtonGroup继承于QObject并非Qwidget。所以它是不可见的,用户无法从窗口上看到这个控件。

// 构造函数,堆区创建
QButtonGroup::​QButtonGroup(QObject * parent = 0)

给按钮组,添加控件

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

发送的信号

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

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

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QDebug>
#include <QButtonGroup> // 按钮组namespace Ui {
class Dialog;
}class Dialog : public QDialog
{
    Q_OBJECTpublic:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();private:
    Ui::Dialog *ui;
    QButtonGroup *btp;private slots:
    void buttonToggledSlot(int,bool);
};#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);    btp = new QButtonGroup(this);
    btp->addButton(ui->checkBox,1);
    btp->addButton(ui->checkBox_2,2);
    btp->addButton(ui->checkBox_3,3);    // 注意,我们的按钮控件,是可以多选的。但是按钮组里的控件,默认是互斥的。
    // 所以,我们要解除按钮组的互斥属性。
    btp->setExclusive(false);    connect(btp,SIGNAL(buttonToggled(int,bool)),
            this,SLOT(buttonToggledSlot(int,bool)));
}Dialog::~Dialog()
{
    delete ui;
}void Dialog::buttonToggledSlot(int id, bool checked)
{
    if(id == 1)
    {
        if(checked)
        {
            qDebug() << "PHP被选中了";
        }
        else
        {
            qDebug() << "不选PHP了" ;
        }
    }
    else if(id == 2)
    {
        if(checked)
        {
            qDebug() << "心之钢被选中了";
        }
        else
        {
            qDebug() << "不选心之钢了" ;
        }
    }
    else if(id == 3)
    {
        if(checked)
        {
            qDebug() << "java被选中了";
        }
        else
        {
            qDebug() << "不选java了" ;
        }
    }
    else
    {    }
}

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

QLineEdit用于输入一个单行文本。常用属性如下。

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);    connect(ui->pushButton,SIGNAL(clicked()),
            this,SLOT(btnClickedSlot()));
}Dialog::~Dialog()
{
    delete ui;
}void Dialog::btnClickedSlot()
{
    QString text = ui->lineEdit->text();
    qDebug() << "第一个QLineEdit内容:" << text;    text = ui->lineEdit_2->text();
    qDebug() << "第二个QLineEdit内容:" << text;}

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);    connect(ui->pushButton,SIGNAL(clicked()),
            this,SLOT(btnClickedSlot()));    connect(ui->lineEdit,SIGNAL(selectionChanged()),
            this,SLOT(selectChangedSlot()));    connect(ui->lineEdit,SIGNAL(textChanged(QString)),
            this,SLOT(textChangedSlot(QString)));
}Dialog::~Dialog()
{
    delete ui;
}void Dialog::btnClickedSlot()
{
    QString text = ui->lineEdit->text();
    qDebug() << "第一个QLineEdit内容:" << text;    text = ui->lineEdit_2->text();
    qDebug() << "第二个QLineEdit内容:" << text;}void Dialog::selectChangedSlot()
{
    qDebug() << ui->lineEdit->selectedText();
    //    qDebug() <<"1111" ;
}void Dialog::textChangedSlot(QString text)
{
    qDebug() << text ;
}

8、ComboBox组合框(熟悉)

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

常用属性如下:

常用信号:

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->comboBox,SIGNAL(editTextChanged(QString)),
            this,SLOT(editTextChangedSlot(QString)));    connect(ui->comboBox,SIGNAL(highlighted(int)),
            this,SLOT(highlightedSlot(int)));
}Dialog::~Dialog()
{
    delete ui;
}void Dialog::editTextChangedSlot(QString text)
{
    qDebug() << text ;
}void Dialog::highlightedSlot(int index)
{
    qDebug() << index;
}

9、若干与数字相关的组件(熟悉)

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

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QDebug>namespace Ui {
class Dialog;
}class Dialog : public QDialog
{
    Q_OBJECTpublic: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->spinBox,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)));
}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->spinBox->setValue(value);
    ui->verticalScrollBar->setValue(value);
    ui->verticalSlider->setValue(value);
}

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

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

相关文章

滚雪球学Java(67):深入理解 TreeMap:Java 中的有序键值映射表

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

机器人内部传感器阅读笔记及心得-位置传感器-旋转变压器、激光干涉式编码器

旋转变压器 旋转变压器是一种输出电压随转角变化的检测装置&#xff0c;是用来检测角位移的&#xff0c;其基本结构与交流绕线式异步电动机相似&#xff0c;由定子和转子组成。 旋转变压器的原理如图1所示&#xff0c;定子相当于变压器的一次侧&#xff0c;有两组在空间位置上…

MyBatis-Plus 优雅实现数据加密存储

文章目录 前言一、数据库字段加解密实现1. 定义加密类型枚举2. 定义AES密钥和偏移量3. 配置定义使用的加密类型4. 加密解密接口5. 解密解密异常类6. 加密解密实现类6.1 AES加密解密实现类6.2 Base64加密解密实现类 7. 实现数据库的字段保存加密与查询解密处理类8. MybatisPlus配…

Selenium安装与配置

文章目录 一、selenium安装1. Python环境准备&#xff1a;2. 安装Selenium&#xff1a;3. 浏览器驱动安装&#xff1a;4. 验证安装&#xff1a; 二、常见问题1. Selenium版本与浏览器驱动程序不兼容&#xff1a;2. 浏览器驱动程序路径未正确设置&#xff1a; Selenium是一个用于…

2024年1月手机市场行业分析:苹果手机份额骤降,国产高端手机成功逆袭!

小米Ultra发布。 一方面&#xff0c;我们有望看到国产手机再一次超越自己的决心&#xff0c;继续创新追逐高端&#xff1b;另一方面&#xff0c;我们也不得不正视目前手机市场所面临的危机状态。 2024年1月的线上手机市场远不如去年。根据鲸参谋数据显示&#xff0c;今年1月京…

Java面试题之分布式/微服务篇

经济依旧不景气啊&#xff0c;如此大环境下Java还是这么卷&#xff0c;又是一年一次的金三银四。 兄弟们&#xff0c;你准备好了吗&#xff1f;冲冲冲&#xff01;欧里给&#xff01; 分布式/微服务相关面试题解 题一&#xff1a;CAP理论&#xff0c;BASE理论题二&#xff1a;…

【2024软件测试面试必会技能】Postman(1): postman的介绍和安装

Postman的介绍 Postman 是一款谷歌开发的接口测试工具,使API的调试与测试更加便捷。 它提供功能强大的 Web API & HTTP 请求调试。它能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT..)&#xff0c;附带任何数量的参数 headers。 postman是一款支持http协议的接口调试…

springboot整合mybatisPlus超级详细

springboot整合mybatis-plus超级详细 一、环境二、springboot整合myBatisPlus2.1新建2.2 添加Mybatis-plus和mysql依赖2.3 修改配置文件2.4 新建包和文件2.5 新建表2.6 创建实体类2.7 创建Mapper接口2.8 创建Service接口2.9 创建Service实现类2.10 增删改查 MyBatis-Plus&#…

C# Onnx 使用onnxruntime部署实时视频帧插值

目录 介绍 效果 模型信息 项目 代码 下载 C# Onnx 使用onnxruntime部署实时视频帧插值 介绍 github地址&#xff1a;https://github.com/google-research/frame-interpolation FILM: Frame Interpolation for Large Motion, In ECCV 2022. The official Tensorflow 2…

四.QT5工具安装和环境变量的配置

1.以管理员身份运行安装包 2.登录qt账号&#xff0c;点击【next】 3.选中同意 4.选择安装目录&#xff0c;注意不能有中文和空格 5.勾选 64位 mingw。点击【next】&#xff0c;等待安装完成 6.配置环境变量

为什么很多人选用QT开发,有哪些应用实例?

在软件开发领域&#xff0c;Qt框架作为一种跨平台的C应用程序开发框架&#xff0c;近年来受到越来越多开发者的青睐。这主要得益于其卓越的跨平台性能、丰富的功能库、开发效率以及社区支持。以下将通过详实的分析&#xff0c;从不同角度探讨为什么很多人改用QT开发&#xff0c…

力扣645. 错误的集合(排序,哈希表)

Problem: 645. 错误的集合 文章目录 题目描述思路复杂度Code 题目描述 思路 1.排序 1.对nums数组按从小到大的顺序排序; 2.遍历数组时若判断两个相邻的元素则找到重复元素&#xff1b; 3.记录一个整形变量prev一次置换当前位置元素并与其作差&#xff0c;若差等于2着说明缺失的…

Mysql索引操作

1、索引语法 2、慢查询日志 慢查询日志记录了所有执行时间超过指定参数&#xff08; long_query_time &#xff0c;单位&#xff1a;秒&#xff0c;默认 10 秒&#xff09;的所有 SQL 语句的日志。 MySQL 的慢查询日志默认没有开启&#xff0c;我们可以查看一下系统变量 slo…

【2024软件测试面试必会技能】Appium自动化(5):元素定位工具

常用元素定位工具使用 uiautomatorviewer定位工具&#xff1a; 元素定位主要用来获取元素信息&#xff0c;获取元素信息后才能用appium提供的相关API去识别和操作元素。 谷歌在AndroidSDK中&#xff0c;提供了元素定位工具uiautomatorviewer&#xff0c;该工具可在android-s…

三opencv源码解压及环境变量配置

1.双击opencv-3.4.6-vc14-vc15.exe 2.选择解压的路径&#xff0c;点击【extract】 3.设计环境变量

从零学习Linux操作系统第二十七部分 shell脚本中的变量

一、什么是变量 变量的定义 定义本身 变量就是内存一片区域的地址 变量存在的意义 命令无法操作一直变化的目标 用一串固定的字符来表示不固定的目标可以解决此问题 二、变量的类型及命名规范 环境级别 export A1 在环境关闭后变量失效 退出后 关闭 用户级别&#xff…

《初阶数据结构》尾声

目录 前言&#xff1a; 《快速排序&#xff08;非递归&#xff09;》: 《归并排序》&#xff1a; 《归并排序&#xff08;非递归&#xff09;》&#xff1a; 《计数排序》&#xff1a; 对于快速排序的优化&#xff1a; 分析&#xff1a; 总结&#xff1a; 前言&#xff1a…

新疆营盘古城及古墓群安防舱体实施方案

3 总体布局 3.1设计原则 3.1.1执行有效的国家标准、国家军用标准和行业标准&#xff1b; 3.1.2满足指标要求&#xff1b; 3.1.3采用通用化、模块化设计&#xff0c;提高设备可维修性&#xff1b; 3.1.4采用人机工程学知识进行设计&#xff0c;充分考虑安全性。 3.2 总体…

51单片机学习(3)-----独立按键控制LED的亮灭状态

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步了。 目录 一. 器件介绍及实验原理 1.独立按键 &#xff08;1&#xff09;独…

外包干了3个月,技术退步明显

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…