QT--控件篇二

一、文本框

1. QLineEdit
  1. 文本框通常使用QLineEdit和QTextEdit这两个类来实现。
    • QLineEdit:用于单行文本输入。
    • QTextEdit:用于多行文本输入,可以包含丰富的文本格式。
  2. setText(QString txt);设置默认的显示内容,用QString text();获取用户输入文本内容
  3. setPlaceholderText(QString text): 设置占位符文本,底纹
  4. setReadOnly(bool readOnly): 设置是否只读。
  5. setEchoMode 是 QLineEdit 类中的一个方法,用于设置文本输入的显示模式。它可以控制输入文本的显示方式,例如:正常显示、密码输入等。QLineEdit 提供了四种回显模式:
    • Normal(默认模式):文本正常显示。
    • NoEcho:文本不显示。
    • Password:文本显示为密码格式(通常是圆点或星号)。
    • PasswordEchoOnEdit:文本在编辑时显示为密码格式,编辑完成后显示为正常文本。
    • ui->lineEdit->setEchoMode(QLineEdit::NoEcho);
  6. 在Qt中,文本框(QLineEdit)输入完成的信号是 editingFinished。这个信号在文本框失去焦点时或者用户按下回车键时发出。您可以使用这个信号来执行一些操作,例如验证输入或保存数据。
  7. 在Qt中,文本框(QLineEdit)的文本内容发生变化时,会发出 textChanged 信号。您可以使用这个信号来实时处理文本变化,例如动态验证输入或更新UI。
    QLineEdit::textChanged 信号:每当 QLineEdit 中的文本发生变化时发出。信号传递一个 QString 参数,表示当前的文本内容。
  8. const QString &text 是一个参数类型,它用于传递 QString 对象的常量引用。这意味着传递的是一个引用,而不是复制整个字符串,从而提高效率。而且const 表示字符串内容是常量,不能在槽函数中被修改。
  9. 范例
//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 slots:
    void onTextChanged(const QString &text);
    void onEditingFinished();

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


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

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

    // 设置默认文本
    ui->lineEdit->setText("Default Text");

    // 设置占位符文本
    ui->lineEdit->setPlaceholderText("Enter your text here...");

    // 设置只读模式
    // ui->lineEdit->setReadOnly(true);

    // 设置回显模式
    ui->lineEdit->setEchoMode(QLineEdit::Normal); // 也可以设置为 NoEcho, Password, PasswordEchoOnEdit

    // 连接信号和槽
    connect(ui->lineEdit, &QLineEdit::textChanged, this, &Widget::onTextChanged);
    //connect(ui->lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(onTextChanged(const QString &)));
    //还是新方法好用,至少不用槽函数的签名匹配那么严格,只填写函数。
    connect(ui->lineEdit, &QLineEdit::editingFinished, this, &Widget::onEditingFinished);
}

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

void Widget::onTextChanged(const QString &text)
{
    qDebug() << "Text changed:" << text;
}

void Widget::onEditingFinished()
{
    QString text = ui->lineEdit->text();
    qDebug() << "Editing finished. Text:" << text;
}


2. QTextEdit
  1. QTextEdit 是 Qt 中用于多行文本输入和显示的组件,它提供了比 QLineEdit 更丰富的功能,如支持文本格式化、图像显示等。
  2. setText(QString &str);设置默认文本
  3. QString toPlainText();//获取用户输入的内容,同text()
  4. 没有editingFinished方法,textChanged方法
  5. append 方法用于向文本框中追加新的文本内容。它通常用于在已有文本的末尾添加新的行或段落。这在需要动态向用户显示信息或日志时特别有用。
  6. 字符串格式小提示
 printf("today temp=%d shidu=%d des=%s\n",12,45,"good day");
qt特有的 格式化放那格式
            QString str = QString("usrname=%1 passwd=%2 des=%3 .").arg( "xiao").arg("123").arg("xx");

在这里插入图片描述

二、选择框

1. 复选框QCheckBox
  1. 允许用户从多个选项中选择一个或多个选项,每个选项可以独立地选中或取消选中。
  2. 可以显示为选中(checked)或未选中(unchecked)的状态,用户可以通过点击复选框来改变其状态。
  3. 可以与文本标签一起显示,以便用户了解复选框选项的含义或用途。
  4. setChecked(bool r);//设置默认状态
  5. bool isChecked();//判断是否已经选中
  6. 信号:stateChanged(int r);//会传送一个参数0表示未选中,2表示选中,在使用槽函数时,要定义一个参数来接他,如下图
    在这里插入图片描述
2.单选框QRadioButton
  1. setTexxt(QString txt);设置显示内容
  2. setChecked(bool r); 设置是否被选中
  3. bool isCheck(); 查看是否被选中
  4. 信号:clicked() 当被点击的时候发出该信号,无论谁被点击都返回值1
3. 分组框QGroupBox(了解即可)
  1. QGroupBox用于将一组相关的小部件(如按钮、标签、文本框等)进行分组。这不仅在视觉上创建了一个明显的分隔,还提供了逻辑上的关联,使界面更加清晰和有条理。
  2. QGroupBox可以设置为可选状态(checkable),这样整个组框及其包含的所有小部件可以一起启用或禁用。这对于控制一组相关功能的启用/禁用非常方便。
  3. QGroupBox可以包含一个标题,描述其内部小部件的功能。这有助于用户快速理解组内小部件的用途。
  4. setTitle和title:设置和获取组框的标题。
  5. setCheckable和isCheckable:设置和获取组框是否可选。
  6. setChecked和isChecked:设置和获取组框的选择状态。
  7. setAlignment和alignment:设置和获取组框标题的对齐方式。
  8. setLayout:设置组框的布局管理器,用于管理其内部小部件的布局。
  9. 信号toggled:在组框的选择状态发生改变时发出信号。
4.下拉框
  1. 下拉框(也称为下拉菜单或组合框)是图形用户界面(GUI)中的一种控件,它允许用户从预定义的选项列表中进行选择。下拉框通常以一个紧凑的单行显示,点击之后会展开一个列表,显示所有可选项。用户可以通过点击列表中的项或使用键盘进行选择。
  2. 在Qt框架中,QComboBox类用于实现下拉框。
  3. addItem(QString name);//新增加的item名字
  4. addItems(QStringList list);//新增加的列表
  5. removeItem(int index);//删除第几个Item(从0开始算)
  6. int findText(QString name); 根据item名字找出他的位置
  7. QString itemText(int index) 根据位置找出名字
  8. currentIndexChanged
  • currentIndexChanged 是一个信号(signal),在 Qt 中常用于表示索引发生变化时发出的信号。它通常与下拉框(QComboBox)或者类似的控件一起使用。当用户改变了下拉框的选择时,这个信号就会被触发。
  • connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onTextSlotFun(int )));
  • 在这里插入图片描述
  • 因为connect新旧方法不同,有时候新方法会更难写,旧方法更方便
5.列表框
  1. 定义:列表框(QListWidget)是一个用于显示项目列表的 Qt 控件。它可以在单列中显示多个项目,并允许用户选择一个或多个项目。

  2. 对于列表框(QListWidget)而言,它也可以发出类似于 currentIndexChanged 的信号,用于指示当前选择项的变化。不过,列表框与下拉框(QComboBox)有所不同,因为列表框可以支持多选。因此,它使用的信号是 currentRowChanged,而不是 currentIndexChanged。

  3. 使用场景

  • 项目列表展示:展示文件列表、历史记录、选项列表等。
  • 选项选择:允许用户从预定义的选项中选择一个或多个。
  • 导航和导航:在导航面板中显示和管理导航链接或项目。
  1. 模式切换: 列表模式–图标模式
  • setViewMode(QListWidget::IconMode / QListWidget::ListMode );
  1. 信号
  • 点击某个item发出信号
    itemClicked(QListWidgetItem *item ); //item那个item被点it击了
  • 双击某个item发出信号
itemDoubleClicked(QListWidgetItem *item);
  1. 小item
  • 文本
    setText(QString name);
    QString text();
  • 图标
    setIcon( QIcon &map ); //QIcon表示 图标对象,要和具体的图标文件绑定
  1. item函数是QListWidget类的一个成员函数,用于获取指定行的项目(item)。这是一个非常有用的函数,可以通过行号(索引)访问列表中的项目。
  QListWidgetItem *item = listWidget->item(1); // 获取第二个项目(行号为1)
	QString str = ui->listWidget->item(2)->text();//获取第三个项目的文本
  1. takeItem函数是QListWidget类的一个成员函数,用于从列表中移除并返回指定行的项目。与item函数不同,takeItem函数会将项目从列表中移除,但不会自动删除项目对象,因此需要手动管理内存。
 QListWidgetItem *item = listWidget->takeItem(1); // 移除第二个项目(行号为1)
 delete item;
  1. currentRow 是 QListWidget 类中的一个成员函数,用于获取当前选中的行号。如果没有选中任何行,则返回 -1。这个函数非常有用,可以在用户与列表交互时确定当前选择的项目。
//widget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QListWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>

class Widget : public QWidget {
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);

private slots:
    void handleButtonClick();

private:
    QListWidget *listWidget;
    QPushButton *button;
    QLabel *label;
};

#endif // MYWIDGET_H


//widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include "Widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent), listWidget(new QListWidget(this)), button(new QPushButton("Show Current Row", this)), label(new QLabel(this)) {

    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->addWidget(listWidget);
    layout->addWidget(button);
    layout->addWidget(label);

    // 添加项目到列表框
    listWidget->addItem("Item 1");
    listWidget->addItem("Item 2");
    listWidget->addItem("Item 3");

    connect(button, &QPushButton::clicked, this, &Widget::handleButtonClick);
}

void Widget::handleButtonClick() {
    int row = listWidget->currentRow(); // 获取当前选中的行号

    if (row != -1) {
        label->setText(QString("Current Row: %1").arg(row));
    } else {
        label->setText("No item selected");
    }
}

在这里插入图片描述
在这里插入图片描述

三、在类中定义控件(即成员变量)和在构造函数中创建控件

  • 在Qt中,创建控件时常见的两种方式是直接在类中定义控件(即成员变量)和在构造函数中动态创建控件。这两种方式在资源管理、代码组织和灵活性上有所不同。
在类中直接定义控件
  1. 这种方式在类的头文件中定义控件作为成员变量。这些控件在类的构造函数调用之前已经分配了内存。
  2. 优点
  • 简洁明了:控件的定义和声明在同一位置,代码更易读。
  • 自动管理:当Widget对象被销毁时,控件会自动销毁,不需要手动管理内存。
  1. 缺点:
  • 灵活性较低:所有控件在类实例化时就创建,无法在运行时动态调整。
class MyWidget : public QWidget {
public:
    MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
        button = new QPushButton("Click Me", this);
        // 设置布局和其他初始化操作
    }

private:
    QPushButton *button;
};

在构造函数中动态创建控件
  1. 这种方式在构造函数中使用new关键字动态创建控件,并且通常使用指针来管理这些控件。
  2. 优点
  • 灵活性高:可以根据构造函数参数或运行时条件来创建不同的控件。
  • 延迟初始化:控件的创建和初始化可以推迟到需要时,节省资源。
  1. 缺点
  • 内存管理:需要手动管理内存,确保在析构函数中正确释放,否则会导致内存泄漏。
  • 代码复杂度增加:需要更多的代码来管理指针和内存。
class MyWidget : public QWidget {
public:
    MyWidget(QWidget *parent = nullptr)
        : QWidget(parent)
        , ui(new Ui::Widget) {
        ui->setupUi(this);
         QListWidgetItem *ptItem = new QListWidgetItem;
        // 其他控件的初始化
        QListWidgetItem *item1 =new QListWidgetItem("计算器");
    }

    ~MyWidget() {
        delete ui;
    }

private:
    Ui::Widget *ui;
};

结论
  • 在类中直接定义控件:适用于控件固定且数量不多的情况,代码简洁,易于维护。
  • 在构造函数中动态创建控件:适用于控件的数量和类型需要根据条件动态确定的情况,灵活性更高,但需要小心管理内存。
  • 总的来说,如果控件是固定的且不需要动态调整,直接在类中定义会更简洁和安全。如果需要动态创建控件,则可以在构造函数中动态分配内存,但要确保正确管理内存。
  • 两种方式都要包含头文件,ui不用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring-Cache 缓存

1.简介 2.SpringCache 整合 简化缓存开发 1.导入依赖 <!-- spring cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>2.redis 作为缓存…

c#与欧姆龙PLC通信——如何更改PLC的IP地址

前言 我们有时候需要改变欧姆龙Plc的ip地址,下图有两种更改方式,一种是已知之前Plc设置的Ip地址,还有一种是之前不知道Pl的Ip地址是多少,下面分别做介绍。 1、已知PLC的IP地址的情况下更改地址 假设已知PLC的Ip地址,比如本文中PLC的IP为192.168.1.2,我首先将电脑的IP地…

宝塔面板以www用户运行composer

方式一 执行命令时指定www用户 sudo -u www composer update方式二 在网站配置中的composer选项卡中选择配置运行

ROS2从入门到精通5-1:详解代价地图与costmap插件编写(以距离场ESDF为例)

目录 0 专栏介绍1 代价地图介绍1.1 基本概念1.2 代价定义 2 代价地图配置2.1 通用配置2.2 障碍层配置2.3 静态层配置2.4 膨胀层配置 3 代价地图插件案例3.1 构造地图插件类3.2 注册并导出插件3.3 编译与使用插件 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握RO…

【格密码基础】旋转格的性质

目录 一. 回顾ZSVP问题 二. 基于ZSVP问题的密码系统 三. 格基旋转与Gram矩阵 四. 补充矩阵QR分解 4.1 矩阵分解 4.2 举例 前序文章请参考&#xff1a; 【格密码基础】详解ZSVP问题-CSDN博客 一. 回顾ZSVP问题 根据之前的讨论我们知道解决ZSVP问题的计算复杂度为&#x…

链路追踪系列-01.mac m1 安装zipkin

下载地址&#xff1a;https://hub.docker.com/r/openzipkin/zipkin jelexjelexxudeMacBook-Pro zipkin-server % pwd /Users/jelex/Documents/work/zipkin-server 先启动Es: 可能需要先删除 /Users/jelex/dockerV/es/plugins 目录下的.DS_Store 当端口占用时再次启动&#x…

PostgreSQL 中如何处理数据的并发读写和锁等待超时?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何处理数据的并发读写和锁等待超时一、并发读写的基本概念&#xff08;一&#xff09;…

【日常记录】【插件】excel.js 的使用

文章目录 1. 引言2. excel.js2.1 创建工作簿和工作表2.2 excel文件的导出2.3 excel文件的导入2.4 列2.5 行2.6 添加行2.7 单元格2.8 给总价列设置自动计算(除表头行) 3. 总结参考链接 1. 引言 前端导出excel文件常用库一般是 excel.js 和 xlsx.js xlsx.js 导出数据确实方便&…

技术成神之路:设计模式(六)策略模式

1.介绍 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;封装每一个算法&#xff0c;并使它们可以相互替换。策略模式使得算法的变化独立于使用算法的客户端。 2.主要作用 策略模式的主要作用是将算法或行为…

大数据基础:Hadoop之Yarn重点架构原理

文章目录 Hadoop之Yarn重点架构原理 一、Yarn介绍 二、Yarn架构 三、Yarn任务运行流程 四、Yarn三种资源调度器特点及使用场景 Hadoop之Yarn重点架构原理 一、Yarn介绍 Apache Hadoop Yarn(Yet Another Reasource Negotiator&#xff0c;另一种资源协调者)是Hadoop2.x版…

优化理论——迭代方法

线性回归建模 训练&#xff0c;预测 { ( x ( i ) , y ( i ) ) } \{(x^{(i)},y^{(i)})\} {(x(i),y(i))} ⼀个训练样本&#xff0c; { ( x ( i ) , y ( i ) ) ; i 1 , ⋯ , N } \{(x^{(i)},y^{(i)});i1,\cdots ,N\} {(x(i),y(i));i1,⋯,N} 训练样本集 { ( x 1 ( i ) , x 2 ( i…

爬虫管理解决方案:让数据收集变得高效且合规

一、为何数据收集的效率与合规性同等重要&#xff1f; 随着大数据技术的飞速发展&#xff0c;数据收集已成为企业决策与市场洞察的核心驱动力。然而&#xff0c;在信息海洋中精准捕捞的同时&#xff0c;如何确保这一过程既高效又不触碰法律的红线&#xff0c;是每个数据实践者…

vue实现动态图片(gif)

目录 1. 背景 2. 分析 3. 代码实现 1. 背景 最近在项目中发现一个有意思的小需求&#xff0c;鼠标移入一个盒子里&#xff0c;然后盒子里的图就开始动起来&#xff0c;就像一个gif一样&#xff0c;然后鼠标移出&#xff0c;再按照原来的变化变回去&#xff0c;就像变形金刚…

YOLOv5和LPRNet的车牌识别系统

车牌识别系统 YOLOv5和LPRNet的车牌识别系统结合了深度学习技术的先进车牌识别解决方案。该系统整合了YOLOv5目标检测框架和LPRNet文本识别模型 1. YOLOv5目标检测框架 YOLO是一种先进的目标检测算法&#xff0c;以其实时性能和高精度闻名。YOLOv5是在前几代基础上进行优化的…

树莓派关机

文件 shutdown.sh #!/usr/bin/bash sudo shutdown -r nowpython 文件开头添加 #!/usr/bin/python3

Apache AGE 从文件导入图

您可以使用以下说明从文件创建图形。本文档介绍了&#xff1a; 包含从文件加载图形的函数的当前分支的信息使图形从文件创建的函数的说明作为输入的加载函数的CSV文件的结构&#xff0c;以及相关的注意事项 以及从文件加载国家和城市的简单源代码示例。 用户可以通过两个步骤…

从课本上面开始学习的51单片机究竟有什么特点,在现在的市场上还有应用吗?

引言 51单片机&#xff0c;作为一种经典的微控制器&#xff0c;被广泛应用于各种嵌入式系统中。尽管如今ARM架构的高性能低成本单片机在市场上占据主导地位&#xff0c;但51单片机凭借其独特的优势依然在某些领域保持着应用价值。本文将深入探讨51单片机的特点、架构、应用以及…

信必优收到著名生命科学前沿客户表扬信

近日&#xff0c;信必优收到著名生命科学前沿客户表扬信&#xff0c;客户表扬信必优员工在岗位上勤奋敬业、积极主动&#xff0c;圆满完成了既定的工作任务&#xff0c;在多个项目上展现出卓越技术能力和团队合作精神&#xff1b;其对工作的热情和对质量的追求给整个团队树立了…

WEB07Vue+Ajax

1. Vue概述 Vue&#xff08;读音 /vjuː/, 类似于 view&#xff09;&#xff0c;是一款用于构建用户界面的渐进式的JavaScript框架&#xff08;官方网站&#xff1a;https://cn.vuejs.org&#xff09;。 在上面的这句话中呢&#xff0c;出现了三个词&#xff0c;分别是&#x…

05:中断

中断 1、定时器T0中断1.1、定时器中断触发1.2、案例&#xff1a;通过定时器T0中断来实现灯间隔1s亮灭 2、外部中断2.1、外部中断的触发2.2、案例&#xff1a;使用外部中断0通过震动传感器控制LED1的亮灭 1、当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求&#xf…