Qt控件---输入类

news2024/11/19 17:33:03

文章目录

  • QLineEdit(单行输入)
    • 设置验证器
  • QTextEdit(多行输入)
  • QComboBox(下拉框)
    • 通过读取文件设置条目
  • QSpinBox & QDoubleSpinBox(数字微调框)
  • QDateEdit & QTimeEdit & QDateTimeEdit(日期微调框)
    • 时间计算器
  • QDial(旋钮)
    • 通过旋钮改变不透明度
  • QSlider(滑动条)
    • 通过滑动条改变窗口大小

QLineEdit(单行输入)

属性说明
text输入框中的文本
inputMask输入内容格式约束
maxLength最大长度
frame是否添加边框
echoMode显示方式:QLineEdit::Normal:默认值,文本框会显示输入的文本;QLineEdit::Password:输入的字符会隐藏;QLineEdit::NoEcho:文本框不会显示任何字符
cursorPosition光标所在位置
alignment文字对齐方式
dragEnabled是否允许拖拽
readOnly是否是只读,不可修改
placeHolderText当输入框为空时显示的提示信息
clearButtonEnabled是否会自动显示清除按钮
信号说明
void cursorPositionChanged(int old, int new)鼠标移动时触发,old为之前的位置,new为现位置
void editingFinished()触发条件:按返回键、回车键;行编辑失去焦点
void returnPressed()按返回键、回车键时触发,如果设置了验证器需要通过验证才会触发
void selectionChanged()选中的文本改变时触发
void textChanged(const QString &text)当文本改变时触发,text是新的文本,代码形式修改文本也会触发
void textEdited(const QString &text))当文本改变时触发,text是新的文本,代码形式修改文本不会触发
QLineEdit *e1 = new QLineEdit(this);
QLineEdit *e2 = new QLineEdit(this);
QLineEdit *e3 = new QLineEdit(this);
QLabel *l = new QLabel(this);
QLabel *l1 = new QLabel(this);
QLabel *l2 = new QLabel(this);
QLabel *l3 = new QLabel(this);
QLabel *l4 = new QLabel(this);
QRadioButton *b1 = new QRadioButton(this);
QRadioButton *b2 = new QRadioButton(this);
QPushButton *b = new QPushButton(this);

// 设置控件
l->setGeometry(50, 150, 100, 100); l->setWordWrap(true);
l1->setText("姓名");
l2->setText("密码"); l2->move(0, 30);
l3->setText("性别"); l3->move(0, 60);
l4->setText("电话"); l4->move(0, 90);
e1->move(40, 0); e2->move(40, 30); e3->move(40, 90);
e2->setEchoMode(QLineEdit::Password);
b1->setText("男"); b2->setText("女");
b1->move(40, 60); b2->move(80, 60);
b->setText("确定"); b->move(50, 130);

// 点击确认后将信息显示到 l 控件中
connect(b, &QPushButton::clicked, this, [=](){
    // 获取性别
    QString gender = "";
    if(b1->isChecked()) gender = "男";
    if(b2->isChecked()) gender = "女";

    // 判空
    if(gender == "" || e1->text() == "" || e2->text() == "" || e3->text() == "")
    {
        l->setText("请输入全部信息");
        return;
    }

    // 显示
    QString ret = "";
    ret += "姓名:";
    ret += e1->text();
    ret += "\n密码:";
    ret += e2->text();
    ret += "\n性别:";
    ret += gender;
    ret += "\n电话:";
    ret += e3->text();
    l->setText(ret);
});

img

img

设置验证器

设置一个输入框只能输入数字,并且需要输入以1开头的11位数字下方的按钮才会启动点击

使用QRegExp创建一个正则表达式对象,使用QRegExpValidator创建一个验证器对象

QLineEdit *e = new QLineEdit(this);
QPushButton *b = new QPushButton(this);
b->move(0, 100); b->setText("确认"); b->setEnabled(false);

// 给 e 注册⼀个验证器
e->setValidator(new QRegExpValidator(QRegExp("^1\\d{10}$")));

// 设计输入框有文本输入时的槽
// 从而判定是否开启按钮
connect(e, &QLineEdit::textEdited, this, [=](const QString &arg1){
    QString content = arg1;
    int pos = 0;

    if (e->validator()->validate(content, pos) == QValidator::Acceptable)
        b->setEnabled(true);
    else
        b->setEnabled(false);
});

imgimg

可以看到明显的区别

QTextEdit(多行输入)

QTextEdit 表示多行输⼊框,也是⼀个富文本 & markdown 编辑器,并且能在内容超出编辑框范围时自动提供滚动条。

属性说明
markdown支持markdown格式,能自动对markdown文本进行渲染为html
html支持大部分html标签
placeHolderText输入框为空时的提示内容
readOnly是否只读
undoRedoEnable是否开启 undo、redo 功能;ctrl+Z—undo;ctrl+Y—redo
autoFormating开启自动格式化
tabstopWidth按下缩进占多少空间
overwriteMode是否开启覆盖写模式
acceptRichText是否接收富文本内容
verticalScrollBarPolicy垂直方向滚动条的出现策略:Qt::ScrollBarAsNeeded:默认值,根据内容自动决定是否需要滚动条;Qt::ScrollBarAlwaysOff:总是关闭滚动条;Qt::ScrollBarAlwaysOn:总是显示滚动条
horizontalScrollBarPolicy水平方向滚动条的出现策略:Qt::ScrollBarAsNeeded:默认值,根据内容自动决定是否需要滚动条;Qt::ScrollBarAlwaysOff:总是关闭滚动条;Qt::ScrollBarAlwaysOn:总是显示滚动条
信号说明
textChanged()文本内容改变时触发
selectionChanged()选中范围改变时触发
cursorPositionChanged()光标移动时出发
undoAvailable(bool)可以进行undo操作时触发
redoAvailable(bool)可以进行redo操作时触发
copyAvaiable(bool)文本被选中或者取消选中时触发

QComboBox(下拉框)

属性说明
currentText当前选中的文本
currentIndex当前选中的条目下标,没有选中条目则为-1
editable是否允许修改,也可以设置验证器
iconSize下拉框图标的大小
maxCount条目最大数
方法说明
addItem(const QString&)添加条目
currentIndex()获取当前选中的条目下标,没有选中条目则为-1
currentText()获取当前条目的文本内容
信号说明
activated(int) activated(const QString &text)当选择了⼀个选项时触发,这个时候相当于点开下拉框并且鼠标划过某个选项还没有确认做出选择
currentIndexChanged(int) currentIndexChanged(const QString &text)当前选项改变时触发,此时已经明确的选择了⼀个选项,用户操作或者通过程序操作都会触发这个信号
editTextChanged(const QString &text)当编辑框中的文本改变时发出,需要editable为true时才有效
QComboBox *e1 = new QComboBox(this);
QComboBox *e2 = new QComboBox(this);
QComboBox *e3 = new QComboBox(this);
QLabel *l = new QLabel(this);
QLabel *l1 = new QLabel(this);
QLabel *l2 = new QLabel(this);
QLabel *l3 = new QLabel(this);
QPushButton *b = new QPushButton(this);

// 设置控件
l->setGeometry(50, 100, 100, 100); l->setWordWrap(true);
l1->setText("主食");
l2->setText("水果"); l2->move(0, 30);
l3->setText("饮料"); l3->move(0, 60);
e1->move(40, 0); e2->move(40, 30); e3->move(40, 60);
b->setText("确定"); b->move(20, 90);

// 添加条目
e1->addItems(QStringList({"米饭", "面条"}));
e2->addItems(QStringList({"苹果", "西瓜", "香蕉"}));
e3->addItems(QStringList({"可乐", "雪碧"}));

// 点击确认后将信息显示到 l 控件中
connect(b, &QPushButton::clicked, this, [=](){
    QString ret = "";
    ret += "主食";
    ret += e1->currentText();
    ret += "\n水果:";
    ret += e2->currentText();
    ret += "\n饮料:";
    ret += e3->currentText();
    l->setText(ret);
});

img

通过读取文件设置条目

img

QComboBox *e = new QComboBox(this);

// 打开文件
std::ifstream file("d:/config.txt");
std::string line;
// 读取文件数据并设置条目
while (std::getline(file, line))
{
    // 注意要将C++原生的string转为QString类型
    e->addItem(QString::fromStdString(line));
}
file.close(); // 关闭文件

img

QSpinBox & QDoubleSpinBox(数字微调框)

QSpinBox 或者 QDoubleSpinBox 表示"微调框",它是带有按钮的输入框,可以用来输⼊整数/浮点数,通过点击按钮来修改数值大小。

属性说明
value存储数值
singleStep每次调整的步长
displayInteger数字的进制,设为10就是十进制,2就是二进制
minimum最小值
maximum最大值
suffix后缀
prefix前缀
wrapping是否允许换行
frame是否带边框
alignment文字对齐方式
readOnly是否允许修改
buttonSymbol按钮上的图标:UpDownArrows:上下箭头PlusMinus:加减号NoButtons:没有按钮
accelerated(加速)按下按钮时是否为快速调整模式
correctionMode输入有误时如何修正:QAbstractSpinBox::CorrectToPreviousValue:如果输入了无效值,则恢复成上一个有效值;QAbstractSpinBox::CorrectToNearestValue:如果输入了无效值,则恢复成离这个无效值最近的有效值
keyboardTrack是否开启键盘跟踪:设为true:每次在输入框输入一个数字,都会触发一次valueChanged() 和 textChanged() 信号;设为false:只有在最终按下 enter 或者输入框失去焦点才会触发valueChanged() 和 textChanged() 信号
信号说明
textChanged(QString)文本发生改变时会触发,参数 QString 带有 前缀 和 后缀
valueChanged(int)文本发生改变时会触发,参数 int 表示当前的数值
QComboBox *e1 = new QComboBox(this);
QComboBox *e2 = new QComboBox(this);
QComboBox *e3 = new QComboBox(this);
QSpinBox *s1 = new QSpinBox(this);
QSpinBox *s2 = new QSpinBox(this);
QSpinBox *s3 = new QSpinBox(this);
QLabel *l = new QLabel(this);
QLabel *l1 = new QLabel(this);
QLabel *l2 = new QLabel(this);
QLabel *l3 = new QLabel(this);
QPushButton *b = new QPushButton(this);

// 设置控件
s1->move(120, 0);s2->move(120, 30);s3->move(120, 60);
l->setGeometry(50, 100, 100, 100); l->setWordWrap(true);
l1->setText("主食");
l2->setText("水果"); l2->move(0, 30);
l3->setText("饮料"); l3->move(0, 60);
e1->move(40, 0); e2->move(40, 30); e3->move(40, 60);
b->setText("确定"); b->move(20, 90);

// 添加条目
e1->addItems(QStringList({"米饭", "面条"}));
e2->addItems(QStringList({"苹果", "西瓜", "香蕉"}));
e3->addItems(QStringList({"可乐", "雪碧"}));

// 点击确认后将信息显示到 l 控件中
connect(b, &QPushButton::clicked, this, [=](){
    QString ret = "";
    ret += "主食:";
    ret += e1->currentText() + " " + QString::number(s1->value());
    ret += "\n水果:";
    ret += e2->currentText() + " " + QString::number(s2->value());
    ret += "\n饮料:";
    ret += e3->currentText() + " " + QString::number(s3->value());
    l->setText(ret);
});

img

QDateEdit & QTimeEdit & QDateTimeEdit(日期微调框)

QDateEdit 作为日期的微调框

img

QTimeEdit 作为时间的微调框

img

QDateTimeEdit 作为日期和时间一起的微调框

img

以QDateTimeEdit为例:

属性说明
dateTime时间和日期的值,形如 2000/1/1 0:00:00
date单纯日期的值,形如 2001/1/1
time单纯时间的值,形如 0:00:00
displayFormat时间日期格式,形如 yyyy/M/d H:mm
minimumDateTime最小时间日期
maximumDateTime最大时间日期
timeSpecQt::LocalTime:显示本地时间Qt::UTC:显示协调世界时(UTC)Qt::OffsetFromUTC:显示相对于UTC的偏移量(时差)
信号说明
dateChanged(QDate)日期改变触发
timeChanged(QTime)时间改变触发
dateTimeChanged(QDateTime)时间日期任意一个改变时触发

时间计算器

QLabel *l = new QLabel(this); l->setGeometry(50, 100, 100, 100);
QDateTimeEdit *q1 = new QDateTimeEdit(this);
QDateTimeEdit *q2 = new QDateTimeEdit(this); q2->move(0, 30);
QPushButton *b = new QPushButton(this);
b->setText("计算"); b->move(20, 60);

connect(b, &QPushButton::clicked, this, [=](){
    QDateTime t1 = q1->dateTime();
    QDateTime t2 = q2->dateTime();

    int days = t1.daysTo(t2);
    int hours = (t1.secsTo(t2) / 3600) % 24;

    l->setText(QString::number(days) + "天;" +
               QString::number(hours) + "时。");
});

img

QDial(旋钮)

属性说明
value当前数值
minimum最小值
maximum最大值
singleStep按下方向键的时候改变的步长
pageStep按下 pageUp / pageDown 的时候改变的步长
sliderPosition界面上旋钮显示的初始位置
tracking外观是否会跟踪数值变化
wrapping是否允许循环调整,即值到最大时会回到最小
notchesVisible是否显示刻度线
notchTarget刻度线之间的相对位置,数字越大刻度线越稀疏
信号说明
valueChanged(int)数值改变时触发
rangeChanged(int, int)范围变化时触发

通过旋钮改变不透明度

QLabel *l = new QLabel(this); l->setGeometry(50, 100, 150, 100);
QDial *d = new QDial(this);
d->setWrapping(true); // 设置循环
d->setNotchesVisible(true); // 设置刻度可见
d->setMaximum(100); // 设置最大值
d->setMinimum(0); // 设置最小值
d->setValue(100); // 设置初始值

// 设置当旋钮值改变时的槽
connect(d, &QDial::valueChanged, this, [=](int value){
    l->setText(QString("当前不透明度为: ") + QString::number(value));
    this->setWindowOpacity((double)value / 100);
});

img

QSlider(滑动条)

属性说明
value当前数值
minimum最小值
maximum最大值
singleStep按下方向键的时候改变的步长
pageStep按下 pageUp / pageDown 的时候改变的步长
sliderPosition滑动条显示的初始位置
tracking外观是否会跟踪数值变化
orientation滑动条的方向是水平还是垂直
invertedAppearance是否要翻转滑动条的方向
tickPosition刻度的位置
tickInterval刻度的密集程度
信号说明
valueChanged(int)数值改变时触发
rangeChanged(int, int)范围变化时触发

通过滑动条改变窗口大小

QSlider *x = new QSlider(this); x->move(100, 100);
QSlider *y = new QSlider(this); y->move(100, 200);

// 设置滑动条
x->setMinimum(800); x->setMaximum(1200); // 设置边界
y->setMinimum(600); y->setMaximum(1000); // 设置边界
x->setSingleStep(50); y->setSingleStep(50); // 设置步长
x->setValue(800); y->setValue(600); // 设置初始值
x->setOrientation(Qt::Orientation::Horizontal); // 设置方向
y->setOrientation(Qt::Orientation::Vertical); // 设置方向
y->setInvertedAppearance(true); // 将y改成从上往下增⻓

// 分别设置滑动条数值改变的槽
connect(x, &QSlider::valueChanged, this, [=](int value){
    QRect rect = now->geometry();
    now->setGeometry(rect.x(), rect.y(), value, rect.height());
});
connect(y, &QSlider::valueChanged, this, [=](int value){
    QRect rect = now->geometry();
    now->setGeometry(rect.x(), rect.y(), rect.width(), value);
});

img

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

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

相关文章

十款组装台式电脑可能会用到的主板,看下有没有适合你的

序言 组装台式电脑,还是升级老化的电脑?以下是你需要了解的有关选择合适主板的所有信息。 如果说内存、显卡和 CPU 是 PC 充满活力的四肢,是完成工作和启动你喜爱的游戏的部件,那么主板就是骨架和结缔组织,甚至是灵魂。 可以肯定的是,其他组件在决定 PC 的整体性能和功…

golang 使用栈模拟计算器

思路: // Author sunwenbo // 2024/4/12 16:51 package mainimport ("errors""fmt""strconv" )// 使用数组来模拟一个栈的应用 type Stack struct {MaxTop int //表示栈最大可以存放数的个数Top int //表示栈底&#xff…

【Java集合进阶】数据结构(二又树,二又查找树,平衡二又树)

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

java项目实战之图书管理系统(1)

✅作者简介:大家好,我是再无B~U~G,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 1.背景 图书管理系统是一种用于管理图书…

MongoDB 初识

介绍 MongoDB是一种开源的文档型数据库管理系统,它使用类似于JSON的BSON格式(Binary JSON)来存储数据。与传统关系型数据库不同,MongoDB不使用表和行的结构,而是采用集合(Collection)(Mysql表)和…

Linux 快问快答

如果对于找 Java 后端开发的话,我感觉会这几个差不多了,面试官应该不会问的这么详细吧。一般就问问 Linux 的几个常用的命令,然后做一些简单的性能排查就好了。如果面试被问到另外的问题,那我再补充进来,现在先掌握这么…

979: 输出利用先序遍历创建的二叉树的后序遍历序列

解法&#xff1a; #include<iostream> using namespace std; struct TreeNode {char val;TreeNode* left;TreeNode* right;TreeNode(char c) :val(c), left(NULL), right(NULL) {}; }; TreeNode* buildTree() {char c;cin >> c;if (c #) {return NULL;}TreeNode*…

CTF之comment

网站的登录框里有提示 账号&#xff1a;zhangwei 密码&#xff1a;zhangwei***&#xff08;后三位要自己猜&#xff09; 用burpsuit抓包爆破发现密码为zhangwei666 进去后就一个留言榜&#xff08;目前没发现怎么用&#xff09; 扫一下网站发现git泄露 1.下载 进入root用户&…

964: 数细胞

样例&#xff1a; 解法&#xff1a; 1.遍历矩阵 2.判断矩阵[i][j]&#xff0c;若是未标记细胞则遍历相邻所有未标记细胞并标记&#xff0c;且计数 实现&#xff1a;遍历相邻所有未标记细胞 以DFS实现&#xff1a; function dfs(当前状态) {if (终止条件) {}vis[标记当前状…

构建动态交互式H5导航栏:滑动高亮、吸顶和锚点导航技巧详解

功能描述 产品要求在h5页面实现集锚点、吸顶及滑动高亮为一体的功能&#xff0c;如下图展示的一样。当页面滑动时&#xff0c;内容区域对应的选项卡高亮。当点击选项卡时&#xff0c;内容区域自动滑动到选项卡正下方。 布局设计 css 布局 为了更清晰的描述各功能实现的方式&…

CentOS 7安装Nginx

说明&#xff1a;本文介绍如何在CentOS 7操作系统中安装Nginx 下载安装 首先&#xff0c;去官网上下载Nginx压缩包&#xff0c;官网地址&#xff1a;https://nginx.org/en/download.html&#xff0c;我这里下载稳定版1.24.0&#xff1b; 上传到云服务器上&#xff0c;解压&am…

数据分析案例(三):基于RFM分析的客户分群

实验2 基于RFM分析的客户分群 Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢…

读书笔记:高效能人士的七个习惯

前言 恐惧感和不安全感 现代社会&#xff0c;太多的人饱受恐惧感的折磨。他们恐惧将来&#xff0c;恐惧失业&#xff0c;恐惧无力养家。这种弱点&#xff0c;常常助长了一种倾向&#xff1a;无论在工作时&#xff0c;还是回到家中&#xff0c;都倾向于零风险的生活&#xff0…

CMMI认证是什么?如何确定CMMI认证的目标和范围

CMMI&#xff08;Capability Maturity Model Integration&#xff09;认证是一种用于评估和改进组织软件和项目管理过程的框架。它由美国国防部软件工程所&#xff08;SEI&#xff09;开发&#xff0c;旨在帮助组织提高其软件和项目管理的成熟度水平。 CMMI认证的意义在于&…

Python求利率

要求 编写程序计算在给定利率、指定年数的情况下投资的未来值。这个计算公式如下。 使用文本域输入投资额、年份和利率。当用户单击“calculate”按钮时&#xff0c;在文本域中显示未来的投资值&#xff0c;如图所示。 代码实现 import tkinter as tkdef calculate():amou…

求圆、圆球和圆柱的面积和体积(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> //定义π常量的值&#xff1b; # define π 3.141526int main() {//初始化变量值&#xff1b;float r, h, S1, S2, P1, V1, V2;int judge 0;//提示用户&#x…

【Spring进阶系列丨第九篇】基于XML的面向切面编程(AOP)详解

文章目录 一、基于XML的AOP1.1、打印日志案例1.1.1、beans.xml中添加aop的约束1.1.2、定义Bean 1.2、定义记录日志的类【切面】1.3、导入AOP的依赖1.4、主配置文件中配置AOP1.5、测试1.6、切入点表达式1.6.1、访问修饰符可以省略1.6.2、返回值可以使用通配符&#xff0c;表示任…

设计模式之大话西游

8年前深究设计模式&#xff0c;现如今再次回锅&#xff5e; 还是大话设计模式 这本书还是可以的 大话西游经典的台词&#xff1a;“曾经有一份真挚的爱情摆在我面前,我没有珍惜,等我失去的时候,我才后悔莫及,人世间最痛苦的事莫过于此。如果上天能够给我一个再来一次的机会,我会…

内网通如何去除广告,内网通免广告生成器

公司使用内网通内部传输确实方便&#xff01;但是会有广告弹窗推送&#xff01;这个很烦恼&#xff01;那么如何去除广告呢&#xff01; 下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1CVVdWexliF3tBaFgN1W9aw?pwdhk7m 提取码&#xff1a;hk7m ID&#xff1a;…

大数据产品有哪些分类?各类里知名大数据产品都有哪些?

随着互联网技术的持续进步和全球数字化转型的推进&#xff0c;我们正处于一个数据爆炸的时代。在这样的大背景下&#xff0c;大数据已经逐渐崭露头角&#xff0c;成为了推动各行各业发展的关键因素和核心资源。大数据不仅仅是指数据的规模巨大&#xff0c;更重要的是它蕴含的价…