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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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_OBJECTpublic: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不用

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

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

相关文章

【NOI】C++数据结构入门之一维数组(一)数组基础

文章目录 前言一、概念1.导入2.数组2.1 数组的创建2.2 数组的使用 二、例题讲解问题&#xff1a;1423 - 考试成绩的简单统计问题&#xff1a;1153 - 查找“支撑数”问题&#xff1a;1156 - 排除异形基因问题&#xff1a;1155 - 找找谁的身高超过全家的平均身高问题&#xff1a;…

计算机网络生成树协议介绍与实践

生成树协议 1.环路 二层环路&#xff1a;数据链路层&#xff0c;交换机&#xff08;二层设备&#xff09;通过线路连接环状。即物理成环并且没有开启防环协议。 危害&#xff1a;广播风暴&#xff1a;交换机将未知帧广播&#xff0c;收到后的交换机继续广播&#xff0c;不断…

全国地级市-产业升级、高级化、合理化数据集(1999-2022年)

数据年份&#xff1a;1999-2022年 数据范围&#xff1a;地级市以上城市 数据来源&#xff1a;中国城市统计NJ 数据整理&#xff1a;内含原始版本、线性插值版本、ARIMA填补版本 数据说明&#xff1a;参考干春晖&#xff08;2011&#xff09;《经济研究》的文章 &#xff0c…

数据结构(单链表(1))

前言 线性表中有着许多的结构&#xff0c;如顺序表和链表。而单链表则是链表的最基础的一种形式&#xff0c;下面就让我们对其做一个了解。 概念 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次…

ENSP中VLAN的设置

VLAN的详细介绍 VLAN&#xff08;Virtual Local Area Network&#xff09;即虚拟局域网&#xff0c;是一种将一个物理的局域网在逻辑上划分成多个广播域的技术。 以下是关于 VLAN 的一些详细介绍&#xff1a; 一、基本概念 1. 作用&#xff1a; - 隔离广播域&#xff1a…

Notebook 在复现数据科学研究成果中的丝滑使用

对于数据科学和 AI 科研人员而言&#xff0c;研究成果的复现至关重要。成果复现既是一种研究算法的方式&#xff0c;也有助于科研人员找到研究的新途径。 IDP 中提供自研 notebook 交互式编程环境&#xff0c;它非常适合做数据分析与代码展示&#xff0c;主要功能包括&#xf…

java基础概念01-注释、关键字、字面量、变量

一、注释 注释内容不会参与编译和运行&#xff0c;仅仅是对代码的解释说明。 1-1、注释的三种类型 1、单行注释&#xff1a;//…… // 这是单行注释 2、多行注释&#xff1a;/*…….*/ /* 这是一个 多行注释 */ 3、文档注释 特殊的多行注释&#xff0c;以/**开头&#xf…

【初阶数据结构】理解堆的特性与应用:深入探索完全二叉树的独特魅力

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油&#xff01;时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

Qt类 | QObject类详解

文章目录 一、QObject类介绍二、Properties&#xff08;属性&#xff09;三、Public Functions&#xff08;公共函数&#xff09;四、Public Slots&#xff08;公共槽函数&#xff09;五、Signals&#xff08;信号&#xff09;六、Static Public Members&#xff08;静态公共成…

react Ant Design 动态表头添加操作列

模拟后端返回的表头、列表数据 注意&#xff1a;我们要在表头数据中添加一个 render 函数&#xff0c;里面就是你操作列的内容&#xff0c;value是你数据列表每行的对象 &#xff0c;item 是你表头的对象 页面中去处理这个两个数组 dataList.forEach((item, index) > {item.…

昇思25天学习打卡营第24天 | RNN实现情感分类

概述 情感分类是自然语言处理中的经典任务&#xff0c;是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&#xff0c;实现如下的效果&#xff1a; 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入: This film is great 正确标…

dmasmtool工具详细用法

DMASMTOOL 是 DMASM 文件系统管理工具&#xff0c;提供了一套类 Linux 文件操作命令&#xff0c;用于管理 ASM 文件&#xff0c;是管理、维护 DMASM 的好帮手。DMASMTOOL 工具使用 DMASMAPI 连接到 DMASMSVR&#xff0c;并调用相应的 DMASMAPI 函数&#xff0c;实现创建、拷贝、…

C1W2.LAB.Visualizing Naive Bayes

理论课&#xff1a;C1W2.Sentiment Analysis with Nave Bayes 文章目录 导入包Calculate the likelihoods for each tweetUsing Confidence Ellipses to interpret Nave Bayes 理论课&#xff1a; C1W2.Sentiment Analysis with Nave Bayes 导入包 在下面的练习中&#xff0…

everything搜索不到任何文件-设置

版本&#xff1a; V1.4.1.1024 (x64) 问题&#xff1a;搜索不到任何文件 click:[工具]->[选项]->下图所示 将本地磁盘都选中包含

Python爬虫速成之路(3):下载图片

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…

SpringMVC源码解析(一):web容器启动流程

SpringMVC源码系列文章 SpringMVC源码解析(一)&#xff1a;web容器启动流程 目录 一、SpringMVC全注解配置1、pom文件2、web容器初始化类(代替web.xml)3、SpringMVC配置类(代替springmvc.xml)4、测试Controller 二、SpringServletContainerInitializer1、web容器初始化入口2、…

从本地到全局:基于图的RAG方法进行查询聚焦原理摘要

摘要 使用检索增强生成&#xff08;RAG&#xff09;从外部知识源检索相关信息&#xff0c;使大型语言模型&#xff08;LLMs&#xff09;能够回答有关私有和/或以前未见过的文档集合的问题。然而&#xff0c;当针对整个文本文档库提出全局问题时&#xff0c;例如“数据集中的主…

音视频入门基础:H.264专题(13)——FFmpeg源码中通过SPS属性获取视频色彩格式的实现

一、引言 通过FFmpeg命令可以获取到H.264裸流文件的色彩格式&#xff08;又译作色度采样结构、像素格式&#xff09;&#xff1a; 在vlc中也可以获取到色彩格式&#xff08;vlc底层也使用了FFmpeg进行解码&#xff09;&#xff1a; 这个色彩格式就是之前的文章《音视频入门基础…

【精品资料】模块化数据中心解决方案(33页PPT)

引言&#xff1a;模块化数据中心解决方案是一种创新的数据中心设计和部署策略&#xff0c;旨在提高数据中心的灵活性、可扩展性和效率。这种方案通过将数据中心的基础设施、计算、存储和网络资源封装到标准化的模块中&#xff0c;实现了快速部署、易于管理和高效运维的目标 方案…

2024最新Cloudways主机使用教程(含最新Cloudways折扣码)

Cloudways是一家提供云托管服务的公司&#xff0c;可以帮助你轻松管理和运行你的网站。本教程是Cloudways主机注册和使用教程。Cloudways界面简洁&#xff0c;使用方便&#xff0c;不需要复杂的设置&#xff0c;就能快速搭建一个WordPress网站。它的主机功能包括高级缓存和Bree…