常用控件及自定义控件

2023-05-16

QLabel

QLabel可以用来显示文本,图片和动画等。

显示文本(普通文本、HTML)

          通过QLabel类的setText函数设置显示的内容:

void setText(const QString &)

显示普通文本字符串

QLabel *label = new QLabel(this);
label->setText("hellow,world!");

显示HTML格式的字符串

          比如显示一个链接:

QLabel * label2 = new QLabel(this);
label2 ->setText("<h1><a href=\"https://www.baidu.com\">百度一下</a></h1>");
label2 ->setOpenExternalLinks(true);

          其中setOpenExternalLinks()函数是用来设置用户点击链接之后是否自动打开链接,如果参数指定为true则会自动打开。

          如图所示:

 显示图片

          可以使用QLabel的成员函数setPixmap()设置图片:

void setPixmap(const QPixmap &)

          实现如下:

//定义QPixmap对象
QPixmap pixmap;
//加载图片
pixmap.load(":/QtSourcePicture/c_c.png");
//将图片设置到QLabel中,并显示图片
QLabel *label3 = new QLabel(this);
label3->setPixmap(pixmap);

          如图所示:

 显示动画

          可以使用QLabel 的成员函数setMovie()加载动画,可以播放gif格式的文件

void setMovie(QMovie * movie)

          实现如下:

//定义QMovied对象,并初始化:
QMovie * movie = new QMovie(":/new/Image/mario.gif");
//将动图设置到QLabel中:
QLabel *label4 = new QLabel(this);
label4->setMovie(movie);
//播放加载的动画:
movie->start();

          如图所示:

QLineEdit

          QLineEdit提供单行文本编辑框。

设置/获取内容

          获取编辑框内容使用text(),函数声明如下:

QString text() const

          设置编辑框内容:

void setText(const QString &)

设置显示模式

          使用QLineEdit类的setEchoMode () 函数设置文本的显示模式,函数声明:

void setEchoMode(EchoMode mode)

          EchoMode是一个枚举类型,共定义了四种显示模式:

  • QLineEdit::Normal 模式显示方式,按照输入的内容显示。
  • QLineEdit::NoEcho 不显示任何内容,此模式下无法看到用户的输入。
  • QLineEdit::Password  密码模式,输入的字符会根据平台转换为特殊字符。
  • QLineEdit::PasswordEchoOnEdit   编辑时显示字符否则显示字符作为密码。

          若使用QLineEdit显示文本的时候,希望在左侧留出一段空白的区域,可使用QLineEdit类的setTextMargins()函数:

void setTextMargins(int left, int top, int right, int bottom)

          用此函数可以指定显示的文本与输入框上下左右边界的间隔的像素数。

实例

          显示模式为密码模式下输入"Hello,world!":

          实现如下:

    QLineEdit*ledit=new QLineEdit(this);
    //获取编辑框
    ledit->text();
    //设置文本的显示模式为密码模式
    ledit->setEchoMode(QLineEdit::Password);
    //设置编辑框内容为"Hello,world!"
    ledit->setText("Hello,world!");
    //指定显示的文本与输入框上下左右边界的间隔
    ledit->setTextMargins(10,10,10,10);

          如图所示:

自定义控件

          在搭建Qt窗口界面的时候,在一个项目中很多窗口,或者是窗口中的某个模块会被经常性的重复使用。因此将这个窗口或者模块做成一个独立的窗口类,以备以后重复使用也是很合理的。

          在使用Qt的ui文件搭建界面的时候,工具栏中只提供了标准的窗口控件,有时需要自定义控件,那么该如何实现呢?以一个例子为例说明:自定义如图所示控件:

          使之能够实现拉动滑条与设置数值相互同步,并且能够实现点击下方两个按钮,实行对应的操作。需要从QWidget派生出一个类SmallWidget,实现了一个自定窗口,步骤如下:

          新建一个widget工程,然后选择已建好的工程,右键新建文件:

           点击widget,然后下一步:

 

           在工具栏提供的标准的窗口控件中,点击添加spinBox和horizontalSlider,并设置SmallWidget窗口为水平布局,再调节窗口大小到合适的大小:

            回到widget.ui文件,添加一个widget控件,选中并右键点击“提升为”,将之前新建的类的类名SmallWidget输入其中,勾选“全局包含”,再点击“添加”和“提升”。

            运行一下,就能看到如图所示的自定义控件 

            接下来,设置连接,信号和槽,在SamllWideget.h文件中添加setNum()和getNum()声明:

    //设置数字
    void setNum(int num);
    //获取数值
    int getNum();

            widget.ui文件中添加两个按钮,并分别命名为btn_get和btn_set

            SamllWideget.cpp中 添加添加setNum()和getNum()的定义和实现QSPinBox与QSlider值的同步变化:

#include "samllwideget.h"
#include "ui_samllwideget.h"

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

    //QSpinBox移动 QSlider跟着动
    void(QSpinBox::*SpSingnal)(int)=&QSpinBox::valueChanged;
    connect(ui->spinBox,SpSingnal,ui->horizontalSlider,&QSlider::setValue);
    //QSlider动 QSpinBox跟着移动
    connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
}

SamllWideget::~SamllWideget()
{
    delete ui;
}

//设置数字
void SamllWideget::setNum(int num)
{
    ui->spinBox->setValue(num);
}
//获取数值
int SamllWideget::getNum()
{
    return ui->spinBox->value();
}

            最终实现拉动滑条与设置数值相互同步,点击两个按钮都能够分别实现各自设定的功能:

 源代码

 SamllWideget.h

#ifndef SAMLLWIDEGET_H
#define SAMLLWIDEGET_H

#include <QWidget>

namespace Ui {
class SamllWideget;
}

class SamllWideget : public QWidget
{
    Q_OBJECT

public:
    explicit SamllWideget(QWidget *parent = nullptr);
    ~SamllWideget();

    //设置数字
    void setNum(int num);
    //获取数值
    int getNum();

private:
    Ui::SamllWideget *ui;
};

#endif // SAMLLWIDEGET_H

Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

SamllWideget.cpp 

#include "samllwideget.h"
#include "ui_samllwideget.h"

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

    //QSpinBox移动 QSlider跟着动
    void(QSpinBox::*SpSingnal)(int)=&QSpinBox::valueChanged;
    connect(ui->spinBox,SpSingnal,ui->horizontalSlider,&QSlider::setValue);
    //QSlider动 QSpinBox跟着移动
    connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
}

SamllWideget::~SamllWideget()
{
    delete ui;
}

//设置数字
void SamllWideget::setNum(int num)
{
    ui->spinBox->setValue(num);
}
//获取数值
int SamllWideget::getNum()
{
    return ui->spinBox->value();
}

 Widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QDebug>

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

    //点击获取当前控件的值
    connect(ui->btn_get,&QPushButton::clicked,[=](){
        qDebug()<<ui->diy_widget->getNum();
    });
    //设置到一半
    connect(ui->btn_set,&QPushButton::clicked,[=](){
        ui->diy_widget->setNum(50);
    });
}

Widget::~Widget()
{
    delete ui;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常用控件及自定义控件 的相关文章

  • 用函数调用,把在一个函数的内部改变另一个函数的变量(这个变量相对于第一个函数就是一个外部变量)

    include lt stdio h gt void add int p 指针是整数 xff0c 所以其类型是int整型 这里 p外部变量num的地址 xff0c 即 p 61 num p 43 43 指针变量在单独使用时记得要加括号表示一
  • keil5 C51版本安装及MDK5合并,搭建STM32开发环境(详细教程)

    keil5安装及MDK5合并 资源说明 已将文章中涉及到的所有软件安装包及注册机2032版都放置到百度网盘 xff0c 链接 xff1a 百度云盘链接 提取码 xff1a 0109 1 C51安装 首先在keil官网里下载软件安装包 xff
  • Jmeter性能测试(22)--内存溢出原因及解决方法

    jmeter是一个java开发的开源性能测试工具 xff0c 在性能测试中可支持模拟并发压测 xff0c 但有时候当模拟并发请求较大或者脚本运行时间较长时 xff0c 压力机会出现卡顿甚至报异常 内存溢出 xff0c 这里就介绍下如何解决内
  • Ubuntu16.04的安装教程

    Ubuntu16 04的安装 这里我们会介绍Ubuntu16 04的史诗级保姆教程 开始了 xff0c 车速有点快 xff0c 系好安全带 xff0c 发车了 xff01 1 打开浏览器 xff0c 找到Ubuntu的官网 2 单击 系统桌
  • 电脑触摸板无法使用,I2C HID设备异常处理。

    本人电脑 戴尔 Vostro3400 xff0c win10系统 xff0c 触摸板突然失灵 xff0c 客服让我更新BIOS驱动 xff0c 关闭电源选项的快速启动等等 好了一阵 xff0c 再一重启又失灵 经过无限次百度 xff0c 终
  • 自我简介,对软件工程课程的希望及个人目标

    我是一名桂林理工大学信息科学与工程学院软件工程本科大二年纪的学生 xff0c 热爱学习 xff0c 努力上进 xff0c 对未来充满希望 xff0c 很高兴能学习软件工程这门课程 我对这门课程的希望 xff1a 1 我希望通过学习软件工程这
  • 用HTML、CSS写一个酷炫的动态搜索框

    用HTML CSS写一个酷炫的动态搜索框 可伸展的动态搜索框 xff01 复制粘贴即可用 xff01 HTML部分 xff1a span class token doctype lt DOCTYPE html gt span span cl
  • 使用 curl/git 命令时出现 Failed to connect to XXX port 443: 拒绝连接

    文章目录 原因与过程解决办法 原因与过程 今天在linux下安装docker compose出现Failed connect to github com 443 拒绝连接 网上查了下说是DNS被污染 xff0c 改下host文件 解决办法
  • 【C++】30h速成C++从入门到精通(STL介绍、string类)

    STL简介 什么是STL STL standard template libaray 标准模板库 xff1a 是C 43 43 标准库的重要组成部分 xff0c 不仅是一个可复用的组件库 xff0c 而且是一个包罗数据结构与算法的软件框架
  • redis分布式锁

    1 Redis分布式锁最简单的实现 想要实现分布式锁 xff0c 必须要求 Redis 有 互斥 的能力 xff0c 我们可以使用 SETNX 命令 xff0c 这个命令表示SET if Not Exists xff0c 即如果 key 不
  • 网络边界安全

    防火墙 防火墙的分类 按物理特性划分 软件防火墙硬件防火墙 按性能划分 百兆级防火墙千兆级防火墙 按防火墙结构划分 单一主机防火墙路由集成防火墙分布式防火墙 按防火墙技术划分 包过滤防火墙应用代理防火墙状态检测防火墙 防火墙的功能 访问控制
  • 控制台报错--Module not found: Error: Can‘t resolve ‘core-js/fn/promise‘

    报错信息 xff1a 解决方法 xff1a 原因是vscode会自动导入 import resolve from 39 core js fn promise 39 这一行代码
  • 如何测量无人机电机和螺旋桨的效率?

    为什么要测试电机和螺旋桨 xff1f 首先要确认我们和最终用户的需求是什么 xff1f 因为它将帮助我们发现哪些内容需要优化 xff1a 是否希望增加无人机不间断航拍的续航时长 xff1f 是否希望增加无人机的净载荷 xff1f 是否需要加
  • Jmeter性能测试(23)--分布式测试

    关于jmeter的介绍和元件作用 xff0c 之前的博客介绍过 xff0c 很多其他同行的博客也够详细的 xff0c 这里不做介绍 xff0c 对jmeter不甚了解的可以参考之前的博客 xff1a jmeter xff1a 菜鸟入门到进阶
  • 无人机的电调及其工作原理是什么?

    电子速度控制器 ESC 是电力推进系统的重要硬件组成部分 它就像系统的大脑一样 xff0c 根据从油门控制器接收到的数据信号告诉电机以多快的转速运行 对于无人机和遥控车辆等小型场景应用 xff0c 该控制器的名称为 ESC xff0c 而对
  • 三自由度无人机飞手培训、PID调试、飞行教学、飞控算法验证、故障仿真平台

    无人机在研制过程中需要不断地进行飞行测试 xff0c 而测试的过程不是万无一失的 xff0c 飞行过程中发生任何错误都有可能会导致无人机的损毁或破坏 xff0c 更严重地甚至会造成外界伤害 基于此我们推出了无人机的三旋转自由度 3 DOF
  • shell脚本的执行

    标题 shell脚本的执行 概述 当shell脚本运行时 xff0c 首先会查找系统环境变量ENV xff0c 环境变量指定了环境文件 xff08 加载顺序 etc profile bash profile bashrc etc bashr
  • prometheus(普罗米修斯)

    prometheus 什么是普罗米修斯 xff1f Prometheus是一个开源系统监控和警报工具包 xff0c 最初是在 SoundCloud 上构建的 自2012年成立以来 xff0c 许多公司和组织都采用了Prometheus xf
  • 装机环境配置笔记

    装机过程中需要修改系统中的环境参数以及配置 xff01 xff01 xff01 http t csdn cn Ste4n xff08 记录在这里 xff09 运行环境配置文档 xff08 参考使用非必须 xff09 Notion The a
  • SDN系统方法 | 8. 网络虚拟化

    第8章 网络虚拟化 如第2章所述 xff0c 网络虚拟化和本书介绍的其他部分有所不同 xff0c 这是SDN第一个成功的商业用例 网络虚拟化可以在服务器上实现 xff0c 通常不需要物理网络中的交换机提供任何帮助 网络虚拟化可以实现为现有网

随机推荐

  • 算法设计与分析

    两个例子 调度问题与投资问题 例1 xff1a 调度问题 问题 有 n 项任务 xff0c 每项任务加工时间已知 从 0时刻开始陆续安排到一台机器上加工 每个任务的完成时间是从 0 时刻到任务加工截止的时间 求 总完成时间 xff08 所有
  • 偏航角、俯仰角、横滚角的理解

    最近研究IMU陀螺仪 xff0c 经过一早上的调试 xff0c 最后发现根本看不懂xyz三个角度的度数是怎么来的 xff0c 看了一些教程 xff0c 也觉得不够直观 xff0c 去了b站找了个视频 xff0c 发现讲解的还不错 xff0c
  • ubuntu20.04版本 安装ros1与px4、mavros、QGroundControl

    基于个人安装时的操作以及所浏览的链接 xff0c 仅供参考 文章目录 前言一 pandas是什么 xff1f 二 使用步骤 1 引入库2 读入数据总结 前言 使用ubuntu下载ros px4似乎是一件十分繁琐以及困难的事情 xff0c 但
  • ros中无人机基于话题<geographic_msgs/GeoPoseStamped.h>的指点飞行控制

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 话题认识二 完整代码总结 前言 本篇文章是作者在学习ros时根据自己的认识所写的代码 xff0c 主要是基于话题 lt
  • Jmeter性能测试(24)--dubbo接口测试

    一 Dubbo简介 dubbo是一个分布式服务框架 xff0c 致力于提供高性能和透明化的RPC远程服务调用方案 xff0c 以及SOA服务治理方案 其核心部分包含如下几点 xff1a 1 远程通讯 xff1a 提供对多种基于长连接的NIO
  • 自定义mavlink及收发测试(px4固件V1.11.0,QGC源码4.0)

    一 实现收 1 先定义uORB消息 a01 GPS msg uint64 timestamp time since system start microseconds uint64 lat Latitude uint64 lon Longi
  • 自定义mavlink及收发测试2(px4固件V1.11.0,QGC源码V4.0)

    一 1 下载安装一个mavlink文件或者在原文件上修改 安装步骤 xff08 包含mavlink generator xff09 可参照文章 PX4自定义Mavlink消息 xff08 一 xff09 px4发送 Sense97的博客 C
  • Ubuntu20.04 | 更新软件源 sudo apt-get update 出现错误

    之前使用了清华的官方源 清华大学开源软件镜像站 Tsinghua Open Source Mirror 错误提示 xff1a 忽略 1 https mirrors tuna tsinghua edu cn ubuntu focal InRe
  • PCB封装库的制作

    以下几个元件制作为例 xff1a 元件SMA封装 步骤 xff1a 1 创建PCB库文件 xff1a 单击 File 菜单 xff0c 选择 New 选项中的 Library 选项 xff0c 再选择 PCB Library xff0c 进
  • PCB板自动布线

    自动布线 步骤 xff1a 1 整体删除同层的走线 xff1a 打开PCB文件 xff0c 在层的选项卡中选择顶层 Top Layer xff0c 在 Edit 菜单下选择 Select 选项 xff0c 选择 All on Layer 选
  • 独立按键实验

    按键简介 按键是一种电子开关 xff0c 使用时 xff0c 按下按钮 xff0c 则开关接通 xff0c 松开手时 开关断开 开发板上使用的按键及内部简易图如下图所示 xff1a 按键管脚两端距离长的表示默认是导通状态 xff08 1 2
  • IO 扩展(串转并)-74HC595-16*16LED点阵实验

    51 单片机的IO 口非常有限 xff0c 有时候若想要连接更多外围设备 xff0c 需要通过 IO 扩展来实现 本文介绍一种 IO 口扩展方式 串转并 xff0c 使用的芯片是 74HC595 若有4个 74HC595 芯片 xff0c
  • LED 点阵实验~点亮一个点、数字、汉字、图

    LED 点阵简介 LED 点阵是由发光二极管排列组成的显示器件 xff0c 如下所示为8 8LED 点阵 xff1a 以 16 16LED 点阵为例 xff0c 其内部结构图如下所示 xff1a 16 16 点阵共由 256 个发光二极管组
  • 定时器中断

    定时器简介 介绍定时器之前 xff0c 先说明几个CPU 时序的有关知识 振荡周期 xff1a 为单片机提供定时信号的振荡源的周期状态周期 xff1a 1 个状态周期 61 2 个振荡周期机器周期 xff1a 1 个机器周期 61 6 个状
  • 红外遥控实验

    红外线简介 人眼所能看到的可见光 xff0c 按波长从长到短排列 xff0c 依次为红 xff08 660nm xff09 橙 xff08 610nm xff09 黄 xff08 585nm xff09 绿 xff08 555nm xff0
  • Jmeter性能测试(25)--linux环境运行jmeter并生成报告

    jmeter是一个java开发的利用多线程原理来模拟并发进行性能测试的工具 xff0c 一般来说 xff0c GUI模式只用于创建脚本以及用来debug xff0c 执行测试时建议使用非GUI模式运行 这篇博客 xff0c 介绍下在linu
  • 题目:输入三个整数x,y,z,把这三个数由小到大输出

    程序分析 xff1a 方式一 xff1a 先将两个数比较 xff0c 再将较大值与第三个数比较 xff0c 得到最大值 然后比较剩余的两个值 最后 xff0c 将数值以X lt Y lt Z的顺序输出 方式二 xff1a 将三个数分别两两进
  • 对话框QDialog

    对话框是 GUI 程序中不可或缺的组成部分 很多不能或者不适合放入主窗口的功能组件都必须放在对话框中设置 对话框通常会是一个顶层窗口 xff0c 出现在程序最上层 xff0c 用于实现短期任务或者简洁的用户交互 Qt 中使用QDialog类
  • 布局管理器~登录界面的搭建实例

    所谓的图形用户界面 xff08 GUI xff09 xff0c 本质上就是一堆组件的叠加 创建一个窗口 xff0c 把按钮放上面 xff0c 把图标放上面 xff0c 这样就成了一个界面 因此 xff0c 组件位置的放置尤其重要 xff0c
  • 常用控件及自定义控件

    QLabel QLabel可以用来显示文本 xff0c 图片和动画等 显示文本 xff08 普通文本 HTML xff09 通过QLabel类的setText函数设置显示的内容 void setText const QString amp